所以我在Haskell中学习lambda演算,我正在尝试实现一个isEven函数,如果它是偶数则返回true,否则返回false。我知道0是偶数,然后1是奇数,然后每个交替数是前一个的替代,即如果一个是奇数,那么2是偶数,那么3是奇数。我可以使用isEven函数检查输入是否为0,如果不是,那么以某种方式检查它的后继是偶数还是奇数?
我假设通过“lambda演算”你的意思是我们正在使用一些教会编码的数字+布尔值,而“Haskell”部分主要是你的问题附带的。
isEven = \n -> n flip True
flip = \x y z -> x z y
True = \x y -> x
False = \x y -> y
这与您表达的方式略有不同。
回想教会数字n
意味着n
迭代函数应用程序。 flip
重复了偶数#次是id
,因此n flip == id
甚至n
,n flip == flip
为奇怪的n
。此外,flip True == False
和flip False == True
。因此,构造正确地编码奇偶校验。