首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >“f”是一种特殊的符号、宏还是特殊的形式?

“f”是一种特殊的符号、宏还是特殊的形式?
EN

Stack Overflow用户
提问于 2014-02-01 12:13:51
回答 1查看 137关注 0票数 4

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

此外,(meta #'fn):macro:special-form都是正确的。

最后,(special-symbol? 'fn)false,而(special-symbol? 'fn*)true

有人能帮我澄清这件事吗?是否有其他奇怪的符号是特殊的形式和宏,而不是特殊的符号?

还有一件事,这是我到目前为止看到的唯一一个具有(meta #'fn)的可调用符号

代码语言:javascript
复制
{:arglists ([& sigs]),
 :forms [(fn name? [params*] exprs*) 
         (fn name? ([params*] exprs*) +)]...}

因此,arg列表不像其他符号一样在:arglists中,而是在:forms中。在Clojure中还有其他类似的符号吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-02-01 12:49:53

其他例子有:

代码语言:javascript
复制
let let*
letfn letfn*
loop loop*

星型版本在编译器级别是真正特殊的符号,是语言的原语。非星型版本是在Clojure中定义的var版本。这些都是底层星型版本的助手,它们在一个更方便的级别执行诸如析构、参数检查和文档的操作,例如在Clojure中。

Clojure的文档defines special forms严格地说是“内置到Clojure中的执行核心操作的原语”。但是,这实际上意味着在适用时不那么严格地适用于他们的非星型助手,就像文档的list of special forms一样。

这只是语义学。在其他地方,其他的lisps,你会看到特殊的形式,用来谈论任何形式,改变了正常的评估规则。所以在这个意义上,你会把宏and称为一种特殊的形式,就像它做短路评估一样。在Clojure中,and没有被标记或文档化,这与保留原语或其助手的术语是一致的。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21497885

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档