Function Clojure中的宏和函数

Function Clojure中的宏和函数,function,macros,clojure,Function,Macros,Clojure,我在这篇Clojure教程中读到了以下几行: '由于宏不计算其参数,因此可以将不带引号的函数名传递给宏,并可以构造对具有参数的函数的调用。函数定义不能做到这一点,必须传递匿名函数来包装对函数的调用。” 如果它是正确的,那么既然函数多维数据集不是匿名的,为什么这样做呢- (defn something [fn x] (fn x)) (defn cube [x] (* x x x)) (something cube 4) 你说得对,那句话似乎不正确。我认为它试图说的是,您不能将类似于函

我在这篇Clojure教程中读到了以下几行:

'由于宏不计算其参数,因此可以将不带引号的函数名传递给宏,并可以构造对具有参数的函数的调用。函数定义不能做到这一点,必须传递匿名函数来包装对函数的调用。”

如果它是正确的,那么既然函数多维数据集不是匿名的,为什么这样做呢-

(defn something [fn x]
  (fn x))

(defn cube [x]
  (* x x x))

(something cube 4)

你说得对,那句话似乎不正确。我认为它试图说的是,您不能将类似于函数调用的内容传递给未引用的函数:

(some-function (bla 1 2 3))
在这种情况下,(BLA123)将作为函数调用进行计算,返回值将传递给某个函数

(some-macro (bla 1 2 3))
对于宏,传递的是列表
(bla1 2 3)
,然后可以通过插入参数来构造新的函数调用,或者执行其他操作


正如您所展示的,您仍然可以将一个函数传递给另一个函数,这是一种完全有文档记录的预期使用的技术。

defn是一个宏,代码扩展为,因为您需要匿名函数:
(def something(fn[fn x](fn x))
。我想这就是他所指的。

您正在将函数
cube
传递给
某物,而不仅仅是它的名称。