所以我正在学习Haskell中的lambda演算,并且试图实现一个isEven函数,如果它是偶数则返回true,否则返回false。我知道0是偶数,然后1是奇数,然后每个交替数是前一个的替代数,即如果一个是奇数,则2是偶数,然后3是奇数。我可以通过isEven函数检查输入是否为0,如果不是,则以某种方式检查其后继是偶数还是奇数?
答案 0 :(得分:2)
我认为“ 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
。因此,该结构正确地编码了奇偶校验。