Sono abbastanza nuovo per Clojure e non sono sicuro di comprendere completamente la differenza tra l'apostrofo e il backtick in Clojure.Clojure - differenza tra '(apostrofo) e `(backtick)
(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)
- Correggetemi se sbaglio, ma mi sembra che apostrofo impedisce tutti i simboli (cioè + e x) da risolvere alla loro rispettiva var di, mentre backtick permette i simboli di risolvere al proprio VAR (ma non valuta i valori all'interno della var). È accurato?
- Che cosa fa esattamente il simbolo unquote (~) qui? Sta valutando la var al suo valore reale (cioè il simbolo + per l'oggetto funzione e il simbolo x per l'oggetto numero)? Se potessi spiegare questo in termini di fasi READ-COMPILE-EVAL di Clojure, sarebbe altrettanto utile.
Bella risposta. C'è un post sul blog eccellente qui se vuoi approfondire: https://blog.8thlight.com/colin-jones/2012/05/22/quoting-without-confusion.html –
Vedi tutti quegli esempi in diretta con KLIPSE http: //app.klipse.tech/?cljs_in=(ns%20my.ns)%0A%0A%5B%0A%20%20' (% 2B% 20x% 20x)% 20% 0A% 20% 20% 60 (% 2B% 20x% 20x)% 0A% 20% 20% 60 (~ '% 2B% 20x% 20x)% 0A% 20% 20% 60 (% 2B% 20 ~% 40% 60 (% 2B% 20x% 20x))% 0A% 5D% 0A – viebel