Я новичок в 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 для числового объекта)? Если бы вы могли объяснить это с точки зрения фаз READ-COMPILE-EVAL Clojure, это тоже было бы полезно.