2016-03-21 10 views
0

数値が正、負、ゼロのいずれであるかをテストするマクロを作成しようとしています.3つの可能性のそれぞれに対して特定のアクションを実行します。私のコードは、私はそうのように、答えない答えの拡張バージョンを受け取り、それを拡張しようとすると...Macroexpandが展開されていません

user=> (macroexpand (numif 2 "pos" "zero" "neg")) 
"pos" 

が、私はそれが持っているかもしれないことを理解し...

(defmacro numif [e p z n] `(if (pos? ~e) ~p (if (zero? ~e) ~z (if (neg? ~e) ~n)))) 

です私の〜の配置とは関係がありますが、どこで、なぜそれを理解できないのでしょうか。もし誰かが私のことを説明できたら、私はなぜ私の声明を完全に展開していないのですか?

答えて

3

がquote 'を忘れてはいけない; P

(macroexpand '(numif 2 "pos" "zero" "neg")) 
;; -> (if (clojure.core/pos? 2) "pos" (if (clojure.core/zero? 2) "zero" (if (clojure.core/neg? 2) "neg"))) 
+0

はおやっ私のああ、すごい、そのための愚かな感じ。本当にありがとう! –

関連する問題