首页 > 解决方案 > Haskell 中的 Lambda 演算 isEven 函数

问题描述

所以我正在学习 Haskell 中的 lambda 演算,并且我正在尝试实现一个 isEven 函数,如果它是偶数则返回 true,否则返回 false。我知道 0 是偶数,然后 1 是奇数,然后每个交替数是前一个的替代数,即如果一个是奇数,那么 2 是偶数,那么 3 是奇数。我可以让 isEven 函数检查输入是否为 0,如果不是,那么以某种方式检查它的后继是偶数还是奇数?

标签: haskelllambda-calculus

解决方案


我假设通过“lambda 演算”你的意思是我们正在使用一些 Church 编码的数字 + 布尔值,而“Haskell”部分主要是你的问题所附带的。

isEven = \n -> n flip True
flip = \x y z -> x z y
True = \x y -> x
False = \x y -> y

这与您表达它的方式略有不同。

回忆一下 Church 数字n意味着n迭代的函数应用。flip重复偶数 # 次是id,因此n flip == id对于偶数nn flip == flip对于奇数n。还有,flip True == Falseflip False == True。因此,该构造正确地编码了奇偶校验。


推荐阅读