我刚刚开始学习Clojure。我正在阅读这个。
当它说:
几乎所有的函数和宏都是用Clojure源代码实现的。函数和宏之间的区别将在后面解释。特殊形式由Clojure编译器识别,而不是在Clojure源代码中实现。
有人能解释一下这两个东西的区别吗?(在Clojure源代码中实现和不在Clojure源代码中实现)
用Clojure源代码实现
特定功能/抽象的代码是用Clojure语言本身实现的,即在.clj文件中。
未在Clojure源代码中实现
它是用Java代码实现的。
查看github上的Clojure代码,你会发现有Java和Clojure代码。
let
可以在fn
之上实现为宏,但这并不意味着let
不是一个特殊形式(忽略这里的let
实际上是基于特殊形式let*
的宏)。正如《无所不用其极编程》(Programming with Nothing)等文章所示,真正需要的只有函数这一特殊形式。 - amalloy以下是摘自Chas Emerick的书《Clojure Programming》的一句话,我认为它非常有助于理解Clojure的特殊形式。 :]
特殊形式是Clojure的计算原始构建块,所有其他Clojure都是在其之上构建的。
除了特殊形式之外的所有内容都是通过从有限的原始操作开始引导Clojure本身实现的。
事实上,如果你有动力,你可以在Clojure的特殊形式之上从头开始独立实现Clojure(或您选择的其他语言)。
特殊形式
是Clojure的计算原始构建块,所有其他Clojure都是在其基础上构建的。
函数
是Clojure中的一等值;创建它们由fn
特殊形式完成。