【发布时间】:2023-04-02 21:25:01
【问题描述】:
Clojure 的 defn、defmacro 和 binding 中的参数周围的方括号是真的创建了一个向量还是只是语法问题,使参数从其他参数中脱颖而出?
我正在阅读 Clojure in Action,其中指出:
Clojure 使用向量来表示 函数参数或绑定形式。
这让我在这里问了这个问题。
【问题讨论】:
Clojure 的 defn、defmacro 和 binding 中的参数周围的方括号是真的创建了一个向量还是只是语法问题,使参数从其他参数中脱颖而出?
我正在阅读 Clojure in Action,其中指出:
Clojure 使用向量来表示 函数参数或绑定形式。
这让我在这里问了这个问题。
【问题讨论】:
是的,它确实是一个向量。我们可以通过手动构建一个函数然后对其进行评估来看到这一点:
(eval (list (list 'fn (vector 'x) (list '* 'x 2)) 100))
;=> 200
希望对您有所帮助。
【讨论】:
defn 表单是一个宏,因此在对其进行检查时(宏扩展时间),尚未评估任何内容。因此,当它查看绑定表单时,它需要一个向量,但看到的是一个列表 (vector (quote x) (quote y))。