gpt4 book ai didi

macros - 可以放心地忽略宏和内置宏之间的区别吗?

转载 作者:太空宇宙 更新时间:2023-11-03 18:35:19 25 4
gpt4 key购买 nike

我从 Clojure 开始,这也是我的第一个 lisp。显然有很多东西要吸收,为了减轻认知负担,我尝试找到可以安全忽略的部分(暂时)。

是否可以安全地处理带有宏的表单和带有内置函数的表单,或者是否有以后会出现的陷阱?

换句话说,我是否会遇到需要知道 (defn f1 []) 扩展为

的情况?
(def f1 (.withMeta (clojure.core/fn f1 ([])) (.meta (var f1))))

最佳答案

一般而言,宏的构成非常不同。宏不是“一等公民”:您不能将它们传递给 map 等,不能将它们存储在变量中,也不能将它们apply 到参数列表。最初您不需要担心这些,因为它们显然 不起作用:细微的、难以检测的错误会更麻烦。如果你尝试运行

(map if [true false true false] [1 2 3 4] [-1 -2 -3 -4])

if 不是函数 的事实将变得非常明显。请记住,宏不是函数,你应该没问题:)

PS:宏是 (fn (fn (fn :-D) :^P) :O)

关于macros - 可以放心地忽略宏和内置宏之间的区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5120780/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com