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