我知道:
(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 组合器。有人知道吗?
提前致谢, 埃德温·何塞·帕拉辛卡尔
最佳答案
从 nil
表示中你唯一需要的是能够识别它——写一些 null?
谓词为 nil 返回“true”
和所有其他对的“false”。这意味着答案取决于您对真/假的表述。通过共同选择 λxy.x
和 λxy.y
,nil
的方便编码是 λf.[true]
。将其翻译成 SKI 现在非常容易(我不会在这里做,因为它看起来像家庭作业......)。
(另外,给定 nil
的这种表示形式,实现一个 null?
谓词是一个很好的练习。)
关于functional-programming - 如何使用 S、K 和 I 组合器编写一个空列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1277259/