Xin lỗi cho danh hiệu khủng khiếp mơ hồ :)Clojure - Trích dẫn Lẫn lộn
Tôi mới vào macro và đang gặp khó khăn tìm hiểu sự khác biệt giữa hai báo cáo:
`(+ 1 2 ~(+ 2 3)) ; => (clojure.core/+ 1 2 5)
'(+ 1 2 ~(+ 2 3)) ; => (+ 1 2 (clojure.core/unquote (+ 2 3)))
Khi tôi chạy chúng mà không có sự unquote , họ có vẻ giống hệt hơn là đủ điều kiện?
`(+ 1 2 (+ 2 3)) ; => (clojure.core/+ 1 2 (clojure.core/+ 2 3))
'(+ 1 2 (+ 2 3)) ; => (+ 1 2 (+ 2 3))
Vì vậy, về cơ bản tôi bị nhầm lẫn bởi `vs '. Sự hiểu biết của tôi là cả hai đều trích dẫn mọi thứ trong danh sách, đó là lý do tại sao tôi không chắc tại sao unquoting lại hành xử khác nhau. Về cơ bản `cư xử theo cách tôi mong đợi cả hai` và 'để hành xử.
Cảm ơn!
Bạn cũng có thể đề cập đến giấy lớn [Báo giá Quasi trong Lisp bởi Alan Bawden] (http://www.scribd.com/doc/47702904/Bawden-Quasi-Quotation-in-Lisp). – Daimrod
Daimrod, vâng, cảm ơn vì liên kết! (Lưu ý cho người mới bắt đầu: Có một vài khác biệt giữa các phương ngữ Lisp và Clojure khác. Ví dụ, trong CL và giấy, ',' (khoảng trắng trong Clojure) được sử dụng để unquoting. Ngoài ra, trong CL, một ',' bên ngoài một biểu thức backquoted là không hợp lệ (thường là một lỗi đọc).) – danlei
Cảm ơn, tôi đã không nhận ra unquoting được dành riêng cho cú pháp-quote. Điều đó chắc chắn giải thích kết quả. Tôi đang trải qua Joy of Clojure và tôi đã tạm dừng trong chương Macro để thử nghiệm và cố gắng hiểu công cụ này, vì vậy có thể tôi đã bỏ lỡ các giải thích thêm trong chương :) – anonymous