2009-07-25 13 views
3
(defmacro nif [expr pos zer neg] 
    '(condp = (Integer/signum ~expr) 
    -1 ~neg 
    0 ~zer 
    1 ~pos)) 

Ich bekomme diesen Fehler.Was ist falsch an diesem Makro in Clojure?

1:1 user=> #<Namespace Chapter7Macros> 
1:2 Chapter7Macros=> (nif 1 (+ 2 2) (- 2 2) (- 3 2)) 
1:3 Chapter7Macros=> java.lang.Exception: Unable to resolve symbol: expr in this context (repl-1:57) 

Antwort

6

Ersetzen Sie das Zitat (') durch eine Graviszeichen (`) Syntax-Angabe zu ermöglichen.

+0

Die Schriftart für On Lisp macht es schwierig (für mich und anscheinend auch für OP), 'from \' zu sagen. Im Allgemeinen, wenn Sie mit Makros arbeiten, die Sie wollen \ '. (Backtick, falls jemand Probleme mit meiner Schrift hat!) – amalloy

3

Im allgemeinen Verwendung (macroexpand-1 ‚(nif 1 ...)) werden Sie eine Menge helfen, indem zeigt den Code Ihr Makro in tatsächlich zu übersetzen.