Vâng, thực ra chúng là rất khác nhau. Tuy nhiên, '1
chính xác giống như (quote 1)
. (car ''x)
đánh giá biểu tượng 'trích dẫn'.
1
là biểu thức S, biểu thị bên ngoài của biểu đồ, số 1. Để nói rằng 1
là 'đối tượng số' hoặc biểu thức S để nhập đối tượng đó cả hai đều có thể chấp nhận được. Thường thì người ta nói rằng 1
là biểu diễn bên ngoài cho đối tượng số thực.
(quote 1)
là một S-biểu, nó là một S-biểu hiện cho một danh sách mà yếu tố đầu tiên là biểu tượng 'quote' và có yếu tố thứ hai là số 1. Đây là nơi đó là, từ khóa cú pháp đã khác nhau, không giống như các hàm, không được coi là các đối tượng trong ngôn ngữ và chúng không đánh giá chúng.
Tuy nhiên, cả hai là biểu diễn bên ngoài của các đối tượng (dữ liệu) mà đánh giá cho cùng một mốc. Con số có biểu diễn bên ngoài là 1
, tuy nhiên chúng chắc chắn không phải là cùng một đối tượng, cùng một mã, cùng một mức dữ liệu giống nhau, chúng chỉ đánh giá cho cùng một thứ. Các con số tự đánh giá. Để nói rằng họ đều giống nhau là để nói rằng:
(+ 1 (* 3 3))
Và
(if "Strings are true" (* 5 (- 5 3)) "Strings are not true? This must be a bug!")
Are 'cùng', họ không, họ là cả hai chương trình khác nhau mà chỉ xảy ra với chấm dứt với cùng một giá trị, một hình thức lisp cũng là một chương trình, một biểu mẫu là một mốc cũng là một chương trình, hãy nhớ.
Ngoài ra, tôi được dạy một thủ thuật tiện dụng một lần cho thấy rằng dữ liệu tự đánh giá là thực sự không ký khi nhập:
(let ((num 4))
(symbol? num) ; ====> evaluates to #f
(symbol? 'num) ; ====> evaluates to #t
(symbol? '4) ; ====> evaluates to #f
(symbol? '#\c) ; #f again, et cetera
(symbol? (car ''x)) ; #t
(symbol? quote) ; error, in most implementations
)
dữ liệu tự đánh giá thực sự đánh giá cho riêng mình, họ không 'biểu tượng được xác định trước' của một số loại.
Tôi đã đi vào khá nhiều chi tiết trả lời về cơ bản cùng một câu hỏi ở đây: http://stackoverflow.com/questions/2297452/using-quote-in-clojure - có lẽ câu trả lời đó có thể hữu ích cho bạn. –