TL。 DR:いいえ。現代のlispシステムは、最初のlispよりも多くのプリミティブを持ち、新しいプリミティブデータタイプごとに新しいプリミティブが必要です。
最初のLispには数字はありませんでしたが、完全にチューリングしていました。つまり、他の言語でも可能な計算を行うことができますが、実用的ではありません。数は模倣するのが難しくありませんでしたが、計算は遅かったです。今日、Lisp 1.5より前の遅い算術に関するルーマーがあります。
私が初めてのインタプリタを作ったとき、私は数字を気にすることができませんでした。それは通訳の興味深い面ではありません。私は、一例としてfibonacci
実装がなかった、これは次のように、それがどのように見えるかです:
;; This is NOT Common Lisp code. It's Zozotez
(setq + (lambda (x y)
(if x (cons (car x)
(+ (cdr x) y))
y)))
(setq - (lambda (z w)
(if w (- (cdr z)
(cdr w))
z)))
(setq fibonacci
(lambda (n a1 a2)
(if n
(fibonacci (- n '(1))
a2
(+ a2 a1))
a1)))
(fibonacci '(1 1 1 1 1 1 1 1 1)() '(1))
; ==> (1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1)
ない数字!(1
は私の言葉ではシンボルなので、引用符で囲む必要があります。そうでなければ、変数のように評価されます)
代替番号システムとして、私は位置付けシステムを実装しました。追加/乗算などのために使用されます。おそらく、長さnの格子よりも速いが、作るのがより複雑です。
Lispにクロージャがある場合、教会の数字を使うことができます。ラムダ計算と同じものを使うと、クロージャだけで何かを計算することができます。プリミティブが1つだけ必要です(lambda
)。 (やはり、最も簡単なものではない)
これらの7つの関数を持つLispには数字はありません。 1と2はありません。したがって(プラス1 2)は機能しません。 –
これは1: '(())'です。これは2: '(()())'です。 –