8

そんなこと知ってる:

(cons [p] [q]) is ((s ((s i) (k [p]))) (k [q]))
(car [lst]) is ([lst] k)
(cdr [lst]) is ([lst] (k i))

このようなリストを書きたい

(cons [a] (cons [b] (cons [c] [nil])))

、これは次のようになります。

((s ((s i) (k [a]))) (k ((s ((s i) (k [b]))) (k ((s ((s i) (k [c]))) (k [nil]))))))

しかし、「nil」をS、K、およびIコンビネータにコンパイルする方法がわかりません。誰か知っている?

よろしくお願いします、エドウィンホセパラシンカル

4

1 に答える 1

8

表現から必要なのnilは、それを識別できることだけです。他のすべてのペアに対してnull?「true」を返し、「false」を返す述語を記述します。nilこれは、答えが真/偽の表現に依存することを意味します。との一般的な選択ではλxy.xλxy.yの便利なエンコーディングはnilですλf.[true]。これをSKIに変換するのは今では非常に簡単です(宿題のように見えるので、ここでは行いません...)。

null?(また、この表現を与えられた述語を実装することnilは良い練習です。)

于 2009-08-15T21:28:13.710 に答える