11

我刚刚开始使用 Clojure。我正在读这个。我不明白如何实现特殊形式与如何实现函数和宏之间的区别

几乎所有的函数和宏都是在 Clojure 源代码中实现的。函数和宏的区别在后面解释。Clojure 编译器可以识别特殊形式,但不会在 Clojure 源代码中实现。

有人可以解释两件事之间的区别吗?(在 Clojure 源代码中实现,在 Clojure 源代码中未实现)

4

4 回答 4

7

在 Clojure 源代码中实现

特定功能/抽象的代码是用 clojure 语言本身实现的,即在 .clj 文件中。

没有在 clojure 源代码中实现

它是用 Java 代码实现的。

查看 github 上的 Clojure 代码,您会发现有 Java 以及 clojure 代码。

于 2012-07-13T05:01:59.183 回答
2

从我的角度来看,也许更有用的说法是:

特殊形式是语言的一部分,如果有人将它们从您手中夺走,您将无法替换它们,而必须通过其他方式恢复它们。

例如,如果有人删除了 cond,您可以编写自己的 cond 宏(它只是 if 的包装。如果有人删除 if ......您将不得不分叉语言并将其放回原处。

于 2012-07-13T07:22:57.703 回答
1

加上 Chas Emerick 的Clojure Programming一书的引用,我认为这对理解 Clojure 的特殊形式非常有帮助。:]

特殊形式是 Clojure 的原始计算构建块,Clojure 的所有其余部分都建立在其之上。

Clojure 本身通过从有限的原始操作集引导来实现非特殊形式的所有内容。

事实上,如果您有这样的动力,您可以在 Clojure 的特殊形式之上,自己从头开始实现 Clojure(或您选择的其他语言)。

于 2014-08-21T05:16:11.950 回答
0

Special forms是 Clojure 的原始计算构建块,Clojure 的所有其余部分都是在其之上构建的。

Functions是 Clojure 中的一流值;创造它们属于fn特殊形式。

于 2012-07-13T08:13:44.517 回答