我知道:
(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组合器。有谁知道吗?
提前致谢, 埃德温何塞帕拉辛卡尔
答案 0 :(得分:8)
nil
表示中唯一需要的是能够识别它 - 编写一些null?
谓词,为nil
返回“true”,为所有人返回“false”其他对。这意味着答案取决于您对真/假的表示。通过λxy.x
和λxy.y
的共同选择,nil
的便捷编码为λf.[true]
。将其翻译成SKI现在非常简单(我不会在这里做,因为它看起来像是家庭作业......)。
(另外,如果给出null?
的这种表示,实现nil
谓词是一个很好的练习。)