Tôi đã viết các bit mã sau đây để mô phỏng lăn sáu mặt chết một số lần và đếm bao nhiêu lần mỗi bên hạ cánh lên:Điều gì đang xảy ra với mã Lisp chung này?
(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))))
Chức năng hoạt động tuyệt vời lần đầu tiên tôi gọi nó là , nhưng trên các cuộc gọi tiếp theo, biến myList bắt đầu với giá trị mà nó có vào cuối cuộc gọi cuối cùng, thay vì được khởi tạo trở lại tất cả các số 0 như tôi nghĩ sẽ xảy ra với câu lệnh để cho câu hỏi. Lý do tại sao điều này xảy ra?
FYI, hầu hết mọi người viết lisp chung những ngày này sử dụng tên như 'my-list' thay vì' myList'. Ngoài ra, tôi không tin rằng bạn cần progn đó bởi vì "cơ thể của một let là một progn ngầm" http://www.lispworks.com/documentation/HyperSpec/Body/s_let_l.htm (nó giống như progn đã có). –