S、KおよびIコンビネータを使って空のリストを書くためにどのように?
-
16-09-2019 - |
質問
私がいることを知っています
(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
述語を実装する良い運動です。)
所属していません StackOverflow