clojure 中类似函数的方案宏

Macro for scheme like function in clojure

我想创建类似定义宏的方案,这是我的尝试:

(defmacro define [list & body] 
    `(defn ,(first list) [~@(rest list)] ~body))

但是当我 运行:

(定义 (foo a b) (+ a b))

我遇到错误:java.lang.Exception: First argument to def must be a Symbol (NO_SOURCE_FILE:18)

我的宏有什么问题?

您需要使用~取消对交易品种名称的引用:

(defmacro define [list & body]
  `(defn ~(first list) [~@(rest list)] ~@body))