Lambda演算isEven函数在Haskell

时间:2019-04-04 03:01:27

标签: haskell lambda-calculus

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

1 个答案:

答案 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代表偶数nn flip == flip代表奇数n。另外,flip True == Falseflip False == True。因此,该结构正确地编码了奇偶校验。