Land of Lispの本で、ラムダ関数が唯一の組み込み関数であると読みました。ただし、加算用、数値比較用、データをある変数から別の変数に移動するためのコマンドが少なくとも1つ必要だと思ったので、それがどのように可能かはよくわかりません。誰かが私にlispがそれをどのように行うかを説明できるかどうか疑問に思いました。私は数学者ではないので、可能であれば、複雑な数学をあまり使わずに説明してもらえますか?
3 に答える
ここで「LandofLisp」が言っているのは、それが唯一のLispプリミティブではなく、ラムダ計算が同等であるため、lambda
(Lispが理論的基盤を持っているAlonzo Churchのラムダ計算によると)残りのLispを実装できるということです。lambda
万能チューリング機械に。
ほとんどの実用的なアプリケーションでlambda
は、無名関数を定義するために使用されます。
これが、理論と実際のプログラミング言語の違いです。
Lisp はラムダ計算からアイデアを取り入れましたが、実装していません。ラムダ計算は、関数を使用して計算を行うシステムを記述します。ラムダ計算を理解することは役に立ちますが、Lisp を使用する場合、純粋なラムダ計算でプログラミングすることはできません。
プログラミング言語として、Lisp にはあらゆる種類のデータ型とそれらに対する操作 (数値、文字列、文字、コンス セル、シンボル、関数など) があります。
それをチューリングマシンやプログラミング言語Cのようなものと比較してください.
ここでいくつかのことを混乱させています。lambda
関数ではありません。これは Lisp 言語に組み込まれた構造です。
実用的な Lisp には、多くの組み込み関数があります。少なくともcar
andcdr
はリストを分離する必要があり、いくつかのプリミティブ算術関数は他の関数に関して定義できませんsetf
。
[*] Lisp でChurch 算術を実行できます。しかし、Lisp の型システムのために、結果をきれいに印刷することはできません。しかし、結果を適切に印刷できるかどうかは、Lisp バリアントに依存します。