Как понять логическое выражение в лямбда-выражении? - PullRequest
2 голосов
/ 04 августа 2020

В учебнике это выражение «Истина»: λxy.x, так что это значит? (мне нужно заменить x или y?). И выражение "IFELSE": λfxy.fxy, я понятия не имею, что такое f и как понимать это выражение.

1 Ответ

3 голосов
/ 05 августа 2020

Похоже, что в учебнике описываются Церковные логические значения . Это одна из возможных кодировок значений true и false.

Если вы не понимаете, что означает λ x y. x - это просто сокращение для λ x. λ y. x. Вот что происходит, когда вы применяете логические значения к некоторым переменным:

true a b = (λ x. λ y. x) a b = (λ y. a) b = a
false a b = (λ x. λ y. y) a b = (λ y. y) b = b

Итак, в основном, true кодируется как лямбда, которая принимает два параметра и выбирает первый, а false выбирает второй. .

Что касается того, почему ifelse определяется так, это помогает понять его предполагаемое использование:

ifelse true a b = (λ f. λ x. λ y. f x y) (λ x'. λ y'. x') a b =
= (λ x. λ y. (λ x'. λ y'. x') x y) a b = (λ y. (λ x'. λ y'. x') a y) b =
= (λ x'. λ y'. x') a b = ... = a

Аналогично, ifelse false a b = b. Итак, f в его определении предполагается заменить на true или false.

Обратите внимание также на то, что ifelse на самом деле не делает ничего интересного. Это не обязательно, потому что логические значения уже определены таким образом, что ifelse c x y эквивалентно просто c x y. (концепция, связанная с этим наблюдением: эта-редукция , я думаю, в вашем учебнике это где-то упоминается)

...