2011-08-05 7 views
7

This guy LexPにfexprsを追加すると、schemeの言語の実装が大幅に簡素化されると考えられます。f-exprsを追加すると、LISPの基本式からマクロの実装が簡素化されますか?

Here we see MacCarthyのLISPを使用してマクロを実装する方法。

私の質問ですが、f-exprsを追加すると、LISPでのマクロの実装が簡単になりますか?

+2

lispに関する重要なことは抽象であり、実装ではありません。実装の簡素化の必要性は、抽象化の簡素化の必要性の次にほとんど無関係です。 evalを使うと、その定義を黒板に当てはめることができますが、唯一のことは計算の1つの側面、つまり再帰的に何かを定義することを教えることです。その知識の有用性は、evalが可能にする有用性よりもはるかに小さい。 –

答えて

12

私はその男です。 :)

Fexprsは、カーネル言語のように、言語を劇的に簡素化します。Kernelは、の3つのビルトインのみを持っています。$ define! (新しいバインディングを環境に追加するため)、$ if(通常)、$ vau(lambdaに似ていますが、引数を評価しません)などがあります。

さらに、マクロ(fexprs)は、マクロが実行時とは別に動作する現行のLispsとは異なり、機能として使用できます。これにより、より一般的な言語になります。

しかし、実際のアプリケーションは、カーネルや別の新しいLispでfexprを使って書かれていません。これは、少数の人々による能動的な手直しの領​​域です。

+0

私はいつもマクロと関数の区別があまりにも恣意的であることに気づいたので興味があります。これらを(実験的に)Clojureに追加するのはどれほど簡単でしょうか? – mikera

+2

おそらく非常に難しいです。 Fexprは解釈を必要とするが、効率的にコンパイルする手段はまだない。 [このブログの記事](http://axisofeval.blogspot.com/2011/06/john-shutts-blog.html)には、LtUディスカッションへのポインタが含まれています。 –

+0

このアプローチは解釈にのみ適していると私は正しく理解しましたか? –

関連する問題