私は 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 を実際の値に評価していますか (つまり、+ 記号を関数オブジェクトに、x 記号を数値オブジェクトに)? Clojure の READ-COMPILE-EVAL フェーズでこれを説明できれば、それも役に立ちます。