我编写了以下代码来模拟投掷一个六面骰子多次,并计算每个面出现的次数:
(defun dice (num)
(let ((myList '(0 0 0 0 0 0)))
(progn (format t "~a" myList)
(loop for i from 1 to num do
(let ((myRand (random 6)))
(setf (nth myRand myList) (+ 1 (nth myRand myList)))))
(format t "~a" myList))))
这个函数第一次调用时运行得很好,但在随后的调用中,变量myList从上次调用结束时的值开始,而不是像我以为的那样使用let语句重新初始化为全部为零的值。为什么会发生这种情况?
my-list
这样的名称,而不是myList
。此外,我认为你不需要那个progn,因为“let的主体是一个隐式的progn”http://www.lispworks.com/documentation/HyperSpec/Body/s_let_l.htm(就像progn已经存在一样)。 - Samuel Edwin Ward