医生说这是一种特殊的形式,尽管我看到它被定义为宏。
此外,(meta #'fn)的:macro和:special-form都是正确的。
最后,(special-symbol? 'fn)是false,而(special-symbol? 'fn*)是true。
有人能帮我澄清这件事吗?是否有其他奇怪的符号是特殊的形式和宏,而不是特殊的符号?
还有一件事,这是我到目前为止看到的唯一一个具有(meta #'fn)的可调用符号
{:arglists ([& sigs]),
:forms [(fn name? [params*] exprs*)
(fn name? ([params*] exprs*) +)]...}因此,arg列表不像其他符号一样在:arglists中,而是在:forms中。在Clojure中还有其他类似的符号吗?
发布于 2014-02-01 12:49:53
其他例子有:
let let*
letfn letfn*
loop loop*星型版本在编译器级别是真正特殊的符号,是语言的原语。非星型版本是在Clojure中定义的var版本。这些都是底层星型版本的助手,它们在一个更方便的级别执行诸如析构、参数检查和文档的操作,例如在Clojure中。
Clojure的文档defines special forms严格地说是“内置到Clojure中的执行核心操作的原语”。但是,这实际上意味着在适用时不那么严格地适用于他们的非星型助手,就像文档的list of special forms一样。
这只是语义学。在其他地方,其他的lisps,你会看到特殊的形式,用来谈论任何形式,改变了正常的评估规则。所以在这个意义上,你会把宏and称为一种特殊的形式,就像它做短路评估一样。在Clojure中,and没有被标记或文档化,这与保留原语或其助手的术语是一致的。
https://stackoverflow.com/questions/21497885
复制相似问题