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

このエラーが発生します。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) 

答えて

6

構文クォートを有効にするには、バッククォート( `)によって引用符(")を交換してください。

+0

On Lispのフォントは、(私にとってはもちろんOPのためにも)「from \」を伝えるのを難しくしています。一般的には、マクロを使って作業しているときに\ 'を使います。 (バックティック、誰かが私のフォントに問題がある場合に備えて!) – amalloy

3

一般に(macroexpand-1 '(nif 1 ...))を使用すると、マクロが実際に翻訳しているコードを示すことで多くの助けになります。

関連する問題