11

私はClojureを始めたばかりです。私はこれを読んでいます。特別なフォームの実装方法と、関数とマクロの実装方法の違いがわかりませんでした

ほぼすべての関数とマクロが Clojure ソース コードで実装されています。関数とマクロの違いについては後述します。特殊なフォームは Clojure コンパイラによって認識され、Clojure ソース コードには実装されません。

誰かが2つのことの違いを説明できますか? (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 formsClojure の基本的な計算のビルディング ブロックであり、その上に Clojure の残りのすべてが構築されます。

FunctionsClojure の第一級の値です。それらを作成すると、fn特別な形式になります。

于 2012-07-13T08:13:44.517 に答える