лямбда-исчисление для функционального программирования

StackOverflow https://stackoverflow.com/questions/1662568

Вопрос

в лямбда-исчислении (λ x.λ у.λ с.λ з.x s (y s z)) используется для сложения двух чисел Чёрча, как мы можем это объяснить, есть ли какой-нибудь хороший ресурс по лямбда-исчислению для функционального программирования?ваша помощь очень ценна

Это было полезно?

Решение

На самом деле λ f1.λ f2.λ с.λ з.(f1 s (f2 s z)) вычисляет сложение, поскольку оно фактически заменяет (f2 s z), число, представленное f2, на «ноль» внутри (f1 s z).

Пример:Возьмем двоих для f2, s s z в развернутом виде.f1 один: s z.Замените это последнее z по f2 и вы получите s s s z, развернутая форма на троих.

Простите, с доской и помахиванием руками было бы проще.

Другие советы

В лямбда-исчислении вы кодируете тип данных с точки зрения операций, которые он вызывает.Например, логическое значение — это просто функция выбора, которая принимает на вход два значения a и b и возвращает либо a, либо b:

                      true = \a,b.a   false = \a,b.b

Каково использование натурального числа?Его основная вычислительная цель - обеспечить границу с итерацией.Таким образом, мы кодируем естественное число как оператор, который принимает входную функцию F, значение x, и идентифицируя применение F в течение X для N Times:

                        n = \f,x.f(f(....(f x)...))

с n вхождениями f.

Теперь, если вы хотите итерации N + M, раз в то время как функция F, начинающаяся с x, вы должны начать итерацию n раз, то есть (NFX), а затем итерация для M Дополнительные времена, начиная с предыдущего результата, то есть

                                m f (n f x)

Точно так же, если вы хотите итерации n*m раз, вам нужно итерации M, раз расточив работу итерации N Times f (как в двух вложенных петлях), то есть

                                 m (n f) x  

Предыдущее кодирование данных дата более формально объясняется с точки зрения конструкторов и соответствующих элиминаторов (так называемый кодирование Bohm-berarducci).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top