【问题标题】:What is wrong with this macro in Clojure?Clojure 中的这个宏有什么问题?
【发布时间】:2009-07-25 01:45:03
【问题描述】:
(defmacro nif [expr pos zer neg]
  '(condp = (Integer/signum ~expr) 
     -1 ~neg
     0 ~zer
     1 ~pos))

我收到此错误。

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)

【问题讨论】:

    标签: functional-programming macros clojure


    【解决方案1】:

    将引号 (') 替换为反引号 (`) 以启用语法引用。

    【讨论】:

    • On Lisp 的字体很难(对我来说,显然对 OP 也是如此)区分 ' 和 `。通常,当您使用宏时,您需要 `. (反引号,以防有人对我的字体有问题!)
    【解决方案2】:

    一般来说,使用 (macroexpand-1 '(nif 1 ... )) 将通过向您展示您的宏实际翻译成的代码来帮助您。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多