Ai đó có thể giải thích hành vi sau đây không? Cụ thể, tại sao hàm trả về một danh sách khác mỗi lần? Tại sao không phải là some-list
được khởi tạo thành '(0 0 0)
mỗi lần hàm được gọi?Tại sao chức năng này trả về một giá trị khác nhau mỗi lần?
(defun foo()
(let ((some-list '(0 0 0)))
(incf (car some-list))
some-list))
Output:
> (foo)
(1 0 0)
> (foo)
(2 0 0)
> (foo)
(3 0 0)
> (foo)
(4 0 0)
Cảm ơn!
EDIT:
Ngoài ra, những gì là cách khuyến khích thực hiện chức năng này, giả sử tôi muốn các chức năng để đầu ra '(1 0 0)
mỗi lần?
Ah, giờ đây có ý nghĩa. Cảm ơn lời giải thích rõ ràng. –
Có lẽ nó sẽ là tốt đẹp để thêm rằng quasiquoting cũng không được đảm bảo để trở về danh sách mới. – 6502
"trừ khi bạn biết, bạn đang làm gì" Hành vi sửa đổi dữ liệu chữ là không xác định. Theo spec, bạn có thể không thực sự biết những gì bạn đang làm (chắc chắn), vì vậy "bạn nên ** luôn luôn ** sử dụng danh sách đen (như '(0 0 0)) chỉ là hằng số". –