Я новичок в Clojure, и я не уверен, что полностью понимаю разницу между апострофом и backtick в 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_ [email protected]> 5 5)
- Исправьте меня, если я ошибаюсь, но мне кажется, что апостроф не позволяет всем символам (то есть + и х) переходить к их соответствующим параметрам var, тогда как backtick позволяет символам разрешать их var (но не оценивает к значениям в var). Это точно?
- Что именно делает символ unquote (~) здесь? Является ли это eval'ing переменной var ее фактическому значению (т.е. Символ + для объекта функции и символ x для объекта числа)? Если бы вы могли объяснить это в терминах Clojure READ-COMPILE-EVAL, это также было бы полезно.