Я предполагаю, что под "лямбда-исчислением" вы имеете в виду, что мы работаем с некоторыми закодированными Церковью цифрами + логическими значениями, и часть "Хаскеля" в основном случайна для вашего вопроса.
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
. Таким образом, конструкция правильно кодирует четность.