質問

私がいることを知っています

(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]))))))

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

事前のおかげで、 エドウィン・ホセPalathinkal

役に立ちましたか?

解決

nilおよび他のすべてのペアのための「偽」のために「真」を返すいくつかのnull?述語を書く -

あなたはnil表現から必要な唯一のものは、それを識別することができることです。これは答えが真/偽の自分の表現に依存することを意味します。 λxy.xλxy.yの一般的な選択肢では、nilための便利なエンコードがλf.[true]です。 SKIにこれを翻訳することは、今非常に簡単です(と、それは宿題のように見えるので、私は、ここでそれを行うことはありません...)。

(また、null?のためにこの表現を指定しnil述語を実装する良い運動です。)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top