2012-07-13 57 views
11

我剛剛開始使用Clojure。我正在閱讀this。 在那裏說Clojure:如何實現特殊形式,函數和宏的區別

幾乎所有的函數和宏Clojure中的源代碼來實現我不明白如何與特殊形式的實現,以及如何函數和宏實現的差異。函數和宏之間的區別在後面解釋。 Clojure編譯器認可特殊的表單,而不是在Clojure源代碼中實現。

有人可以解釋兩件事之間的區別嗎? (Clojure中的源代碼實現和Clojure的源代碼未實現)

+0

特殊形式類似於其他語言中的「if」這樣的關鍵字。 – Cubic 2012-07-13 08:45:05

回答

6

Clojure中源代碼

用於特定特徵/抽象的代碼被用Clojure語言本身即在.clj文件中實現執行。

Clojure中的源代碼

它在Java代碼實現未實現。

看看github上的Clojure代碼,你會發現有Java以及clojure代碼。

2

或許更有用的,從我的角度看,把的方式將是:

特殊形式的語言,如果someon把他們遠離你的部分, 你將無法取代他們,並將不得不通過其他方式恢復他們 。

例如,如果有人刪除COND你可以寫你自己的COND宏(它只是一個包裝,如果周圍。應該有人刪除,如果......你會到餐桌的語言,並把它放回去。

+1

我不認爲這個定義是有用的或準確的。例如,'let'可以作爲'fn'之上的宏來實現,但這並不意味着'let'不是一種特殊的形式(這裏不要指出'let'實際上是一個特殊的宏形成'let *')。而像[Programming with Nothing](http://experthuman.com/programming-with-nothing)這樣的帖子顯示,真正你需要的唯一特殊形式就是這個功能。 – amalloy 2012-07-13 08:39:23

+0

但是@阿瑟爾·烏爾費爾德的答案是否符合Clojure的精神?也許他會理清不準確的部分。 – octopusgrabbus 2012-07-13 14:24:35

0

Special forms是。Clojure的計算的基本構建模塊,在其頂部 的Clojure中的其餘全部建成

Functions是用Clojure一流的價值;創建它們落到fn特殊形式

1

加上一個引號。書Chas Emerick的Clojure編程,我認爲這對理解Clojure的特殊形式非常有幫助。 :]

特殊形式是Clojure的基本構建計算塊,最重要的是Clojure的其餘部分。

所有不是特殊形式的東西都是在Clojure自身中通過從有限的一組基本操作中引導而實現的。事實上,如果你的動機很強,你可以在Clojure的特殊形式上從頭開始,從頭開始實施Clojure(或你選擇的其他語言)。

相關問題