To assign random values to multiple variables i tried:
Code: Select all
(defun foo (var1 var2 var3 var4)
(mapcar #'(lambda (x)
(setq x (random 10))
(list var1 var2 var3 var4))
)
)
Thanks!

Code: Select all
(defun foo (var1 var2 var3 var4)
(mapcar #'(lambda (x)
(setq x (random 10))
(list var1 var2 var3 var4))
)
)
Code: Select all
(defmacro ref (place)
(let ((new-value (gensym "NEW-VALUE")))
`(lambda (,new-value)
(setf ,place ,new-value))))
(defmacro refs (&rest places)
(labels ((refs-aux (places)
(when places
(list* `(ref ,(car places)) (refs-aux (cdr places))))))
`(list ,@(refs-aux places))))
(defun test-ref ()
(let (var1 var2 var3 var4)
(mapcar #'(lambda (x)
(funcall x (random 10)))
(refs var1 var2 var3 var4))
(list var1 var2 var3 var4)))
Code: Select all
(defun use-quantities ()
(let ((q1 2)
(q2 4)
(q3 6)
(q4 8)
(q5 5)
(q6 3)
(q7 5))
(format t "~%q1: ~a~%q2: ~a~%q3: ~a~%q4: ~a~%q5: ~a~%q6: ~a~%q7: ~a"
q1 q2 q3 q4 q5 q6 q7)))
Code: Select all
(defun quantities () (values 2 4 6 8 5 3 5))
(defun use-quantities ()
(multiple-value-bind (q1 q2 q3 q4 q5 q6 q7) (quantities)
(format t "~%q1: ~a~%q2: ~a~%q3: ~a~%q4: ~a~%q5: ~a~%q6: ~a~%q7: ~a"
q1 q2 q3 q4 q5 q6 q7)))
Code: Select all
(defun quantities () (list 2 4 6 8 5 3 5))
(defun use-quantities ()
(destructuring-bind (q1 q2 q3 q4 q5 q6 q7) (quantities)
(format t "~%q1: ~a~%q2: ~a~%q3: ~a~%q4: ~a~%q5: ~a~%q6: ~a~%q7: ~a"
q1 q2 q3 q4 q5 q6 q7)))
Code: Select all
(defun quantities () (list 2 4 6 8 5 3 5))
(defun use-quantities (q1 q2 q3 q4 q5 q6 q7)
(format t "~%q1: ~a~%q2: ~a~%q3: ~a~%q4: ~a~%q5: ~a~%q6: ~a~%q7: ~a"
q1 q2 q3 q4 q5 q6 q7))
(apply #'use-quantities (quantities))
Code: Select all
(defvar *q1*)
(defvar *q2*)
(defvar *q3*)
(defvar *q4*)
(defvar *q5*)
(defvar *q6*)
(defvar *q7*)
(defun quantities () (list 2 4 6 8 5 3 5))
(defun use-quantities ()
(progv '(*q1* *q2* *q3* *q4* *q5* *q6* *q7*) (quantities)
(format t "~%q1: ~a~%q2: ~a~%q3: ~a~%q4: ~a~%q5: ~a~%q6: ~a~%q7: ~a"
*q1* *q2* *q3* *q4* *q5* *q6* *q7*)))
Code: Select all
(defun quantities () (list 2 4 6 8 5 3 5))
(define-symbol-macro q1 (elt randoms 0)) ;; q1 will expand into (elt randoms 0), thus
(define-symbol-macro q2 (elt randoms 1)) ;; it will get the local binding of 'randoms'
(define-symbol-macro q3 (elt randoms 2))
(define-symbol-macro q4 (elt randoms 3))
(define-symbol-macro q5 (elt randoms 4))
(define-symbol-macro q6 (elt randoms 5))
(define-symbol-macro q7 (elt randoms 6))
(defun use-quantities ()
(let ((randoms (quantities)))
(format t "~%q1: ~a~%q2: ~a~%q3: ~a~%q4: ~a~%q5: ~a~%q6: ~a~%q7: ~a"
q1 q2 q3 q4 q5 q6 q7)))
Code: Select all
(defvar foo ()
(format t "~A" (* 5 (random 10))))