user=> (eval `(and [email protected](list true false)))
false
user=> (eval `(and [email protected] (list true true 1)))
1
Io sono la sintassi apici e poi applicare un grosso martello per rimuovere le parentesi intorno alla raccolta e poiché ho citato che, hanno usare eval. Questo è utile se stai creando una macro e la funzione passata è "e".
quindi (list 1 2 3)
slitta martellata diventa 1 2 3
.
Questo è un modo, estremamente terribile, ma funziona, quindi ho capito quello che sta facendo per me che è bello. Quindi il mio clojure non è eccezionale, ma spero che questo esempio macro chiarisca le cose.
(defmacro split-my-args-then-apply-fn
"This is one terrible macro designed to show the use of 'and'."
[fun coll & args]
`(~fun [email protected]((apply juxt args) coll)))
Usage (Mai):
(split-my-args-then-apply-fn
and
{:something :true :something-else false}
:something :something-else)
possibile duplicato [ "ridurre" o "applicare" utilizzando le funzioni logiche in Clojure] (http://stackoverflow.com/questions/2891707/ ridurre-o-applicare-utilizzando-funzioni-logiche-in-clojure) – amalloy