Nel secondo esempio è necessario utilizzare l'apostrofo perché si desidera impedire la valutazione degli elementi del vettore. Se rimuovi l'apostrofo, Clojure proverà a risolvere i simboli a
, b
, ecc., Come se fossero legati ad alcuni valori.
Esempio:
user> '[a b c d e]
;; => [a b c d e]
user> [a b c d e]
CompilerException java.lang.RuntimeException: Unable to resolve symbol: a
user> (let [a 1
b 2
c 3
d 4
e 5]
[a b c d e])
;; => [1 2 3 4 5]
Si prega di notare che non c'è bisogno di usare aphostrophe con i numeri, dal momento che valutano a se stessi:
user> 1
;; => 1
user> 2
;; => 2
user> [1 2 3]
;; => [1 2 3]
mentre i simboli non lo fanno, Clojure sarà la ricerca di una valore a cui viene assegnato un determinato simbolo:
user> x
CompilerException java.lang.RuntimeException: Unable to resolve symbol: x
Quindi, conoscere queste informazioni e il fatto che un Gli strumenti di una funzione vengono valutati prima di entrare nella funzione, dovrebbe essere chiaro perché e quando usare un apostrofo prima di un vettore.