gpt4 book ai didi

Clojure: `fn` 是特殊符号、宏还是特殊形式?

转载 作者:行者123 更新时间:2023-12-04 03:38:18 24 4
gpt4 key购买 nike

医生说这是一种特殊形式,尽管我看到了
它被定义为一个宏。

还有 (meta #'fn)两者都有 :macro:special-form一样真实。

最后,(special-symbol? 'fn)false虽然 (special-symbol? 'fn*)true .

有人可以帮我解决这个问题吗?
Clojure 中是否还有其他奇怪的符号既是特殊形式又是宏
而不是特殊符号?

还有一件事,它是迄今为止我见过的唯一一个可调用的符号
有这个(meta #'fn) :

{:arglists ([& sigs]),
:forms [(fn name? [params*] exprs*)
(fn name? ([params*] exprs*) +)]...}

所以 arg 列表不在 :arglists 中像其他符号一样,但在 :forms .
Clojure 中还有其他类似的符号吗?

最佳答案

其他例子是

let let*
letfn letfn*
loop loop*

带星号的版本是编译器级别的真正特殊符号,是语言的原语。未加星标的版本是 var s 在 Clojure 中定义。这些是较低级别加星标版本的助手,可以在更方便的级别(即在 Clojure 中)执行诸如解构、参数检查和文档之类的操作。

Clojure 的文档 defines special forms确切地说,是“执行核心操作的 Clojure 内置原语”。但这实际上意味着在适用于文档的 list of special forms 时不那么严格地适用于他们的未加星标的助手。 .

这只是语义。在其他地方,在其他 lisps 中,您会看到用于谈论任何改变正常评估规则的形式的特殊形式。所以从这个意义上说,你可以调用宏 and一种特殊形式,因为它进行短路评估。在 Clojure and没有这样标记或记录,这与保留原语或其助手的术语一致。

关于Clojure: `fn` 是特殊符号、宏还是特殊形式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21497885/

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