基本的な述語/F 関数
McCarthyの初等 S 関数と述語は次のとおりです。
atom
car と cdr はリストに対してのみ定義されているため、これが必要でした。つまりcar
、アトムを指定した場合に何が起こっているかを示すために、いかなる種類の回答も当てにできません。
eq
アトム間の同等性をテストするため。
car
コンスセルの前半 (アドレス) を返します。(アドレスレジスタの内容)。
cdr
コンス セルの後半 (デクリメント) を返します。(減分レジスタの内容)。
cons
cons への最初の引数を含むアドレスの半分と、2 番目の引数を含むデクリメントの半分を使用して、新しいコンス セルを作成します。
まとめる: S-Function
その後、彼は基本的な表記法に追加し、彼が S-Function と呼んだものを記述できるようにしました。
quote
式を評価せずに表すこと。
cond
前述の述語で使用される基本的な条件。
lambda
関数を表す。
label
彼は再帰のためにこれを必要としませんでしたが、Y-Combinatorについては知らなかったかもしれません( Paul Graham によると)、彼は利便性と簡単な再帰を可能にするためにこれを追加しました。
つまり、彼が Lisp マシン用に 9 つの基本的な「演算子」を実際に定義したことがわかります。あなたの別の質問に対する以前の回答で、このシステムで数値を表現して操作する方法を説明しました。
しかし、この質問に対する答えは、Lisp マシンに何を求めるかによって異なります。label
すべてを機能的に構成し、Y-コンビネーターを適用して再帰を取得できるため、関数なしで実装できます。
atom
car
アトムに対する操作を return に定義した場合、破棄される可能性がありますNIL
。
これら 9 つの定義済みプリミティブのうち 7 つを備えた McCarthy の LISP マシンを本質的に持つこともできますが、表向きは、自分自身にどの程度の不便を課したいかによって、より簡潔なバージョンを定義することもできます。私は彼のマシンが非常に優れていること、または Clojure のような新しい言語の多くのプリミティブが好きです。