3 Stimmen

Was ist falsch mit diesem Makro in Clojure?

(defmacro nif [expr pos zer neg]
  '(condp = (Integer/signum ~expr) 
     -1 ~neg
     0 ~zer
     1 ~pos))

Ich erhalte diesen Fehler.

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)

6voto

pmf Punkte 7438

Ersetzen Sie das Anführungszeichen ( ' ) durch einen Backtick ( ` ), um das Syntax-Quoting zu aktivieren.

3voto

Arthur Ulfeldt Punkte 89086

Im Allgemeinen ist die Verwendung von (macroexpand-1 '(nif 1 ... )) sehr hilfreich, da es Ihnen den Code anzeigt, in den Ihr Makro tatsächlich übersetzt wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X