我对 Clojure 还很陌生,我不确定我是否完全理解 Clojure 中撇号和反引号之间的区别。
(def x 5)
;; Question 1
(+ x x) ;; evaluates to 10
'(+ x x) ;; evaluates to (+ x x)
`(+ x x) ;; evaluates to (clojure.core/+ user/x user/x)
;; Question 2
`(~+ ~x ~x) ;; evaluates to (#<core$_PLUS_ clojure.core$_PLUS_@32ee28a9> 5 5)
- 如果我错了,请纠正我,但在我看来,撇号阻止所有符号(即 + 和 x)解析为它们各自的 var,而反引号允许符号解析为它们的 var(但不计算值在 var 内)。这是准确的吗?
- 不带引号的符号 (~) 到底是做什么的?是否将 var 评估为其实际值(即函数对象的 + 符号和数字对象的 x 符号)?如果您可以根据 Clojure 的 READ-COMPILE-EVAL 阶段来解释这一点,那也会很有帮助。