用于函数式编程的lambda演算

时间:2009-11-02 17:21:11

标签: functional-programming lambda lambda-calculus

在lambda演算中(λx.λy.λs.λz.xs(y s z))用于添加两个教会数字我们如何解释这一点,是否有任何好的资源用于函数式编程的lambda演算?非常感谢您的帮助

2 个答案:

答案 0 :(得分:7)

实际上是λf1。 λf2。 λs。 λz。 (f1 s(f2 s z))计算加法,因为它实际上用f2表示的数字代替(f2 s z)到内部的“零”(f1 s z)。

示例:我们以扩展形式为f2,s s z取两个。 f1是一个:s z。将最后z替换为f2,然后获得s s s z,即展开的三种形式。

对于黑板和挥手,这会更容易,抱歉。

答案 1 :(得分:1)

在lambda演算中,您根据其引发的操作对数据类型进行编码。例如,布尔值只是一个选择函数,它接受输入两个值a和b,并返回a或b:

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

自然数的用途是什么?它的主要计算目的是 提供迭代的约束。因此,我们将自然数编码为运算符 它接受输入函数f,值x,并迭代应用程序 f超过x次n次:

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

n次出现f。

现在,如果你想从x开始迭代函数f的n + m倍 你必须开始迭代n次,即(n f x),然后迭代m 额外的时间,从上一个结果开始,即

                                m f (n f x)

同样,如果你想迭代n * m次,你需要迭代m次 迭代n次f的操作(如在两个嵌套循环中),即

                                 m (n f) x  

以前对数据类型的编码进行了更正式的解释 构造函数和相应的消除器(所谓的 Bohm-Berarducci编码)。