Tôi đã gặp một vấn đề mà tôi không chắc liệu mình có được mọi thứ đúng cho đến nay trên Lisp hay không.Tạo danh sách chứa T là phần tử đơn
Về cơ bản, nhiệm vụ là tầm thường: Tạo danh sách chỉ chứa một mục duy nhất - số T
theo nghĩa đen.
tiếp cận đầu tiên của tôi là:
'(t)
là đúng này? Về cơ bản, nó đánh giá thành
(T)
có vẻ đúng. Khi biểu tượng T
tự đánh giá, điều này sẽ thực hiện công việc. Nhưng sau đó nó đã cho tôi suy nghĩ ... Nếu tôi viết
'(s)
tôi nhận được:
(S)
này trông khá giống nhau, nhưng nên đánh giá theo một cách khác. Vì vậy, tôi nghĩ về
(list t)
đó cũng dẫn đến:
(T)
Nếu tôi so sánh những biểu tượng sử dụng eq
họ đều bình đẳng:
(eq (car (list t)) (car '(t)))
Và cũng nếu II so sánh cả hai giá trị để T
trực tiếp, mọi thứ đều tốt đẹp:
(eq (car (list t)) t)
(eq (car '(t)) t)
Vì vậy, để cắt một câu chuyện dài ngắn: '(t)
hiện công việc, phải không?
Giải thích tuyệt vời, cảm ơn :-). Tôi vẫn thường xuyên không nghĩ về những gì có nghĩa là trích dẫn… ngoài ra, gợi ý với dữ liệu liên tục so với dữ liệu được tạo ra bởi một hàm khá hữu ích. Cảm ơn! –
Trích dẫn có nghĩa là chính xác điều được trả về bởi người đọc được sử dụng. – Svante
@Svante: Thông thường không phải trong Common Lisp. Theo biên dịch tập tin có những trường hợp mà đây không phải là trường hợp cho các đối tượng theo nghĩa đen. Ví dụ bạn có mã nguồn sử dụng hai danh sách (1 2 3). Danh sách có thể là EQ hay không. Trong một trường hợp người đọc có thể đọc một cái gì đó, mà không kết thúc trong mã. Ngoài ra hãy tưởng tượng, người đọc chạy trong một Lisp nơi mã được biên dịch và một Lisp khác mà mã được biên dịch được nạp. –