4.λ演算的循环喷子如果你有烦心事,而有限个字符已经无法满足你的需求了,你想说句“该死!”,怎么样能够表示自己想说无限个“该死”呢?
如果是普通人,那么一般就用“该死 +10086”,至多用“×∞”,或者干脆复制 粘贴指数增长。只不过这些方法都弱爆啦,不能体现任何与他人的差别!如果是一位数学家,他基本只要输入
(λ该死.该死 该死)(λ该死.该死 该死)
问题就解决了!
但这句摸不着头脑的话是什么意思呢?
看看维基百科对λ演算的介绍:“在λ演算中,每个表达式都代表一个函数,这个函数有一个参数,并且返回一个值。不论是参数和返回值,也都是一个单参的函数。可以这么说,λ演算中,只有一种“类型”,那就是这种单参函数。”
举几个简单的例子吧,比如说通常我们想要求sin(x),在λ演算中的表达式就是λx. sin(x),也就是λ. 后面跟的第一个是自变量,第二个是函数,如果我们想说sin(2),那么就是λx. sin(x) 2.类似的,比如说x+2就是λx. x+2.
而如果一个函数,比如说我们想得到3+2,那么我们就要对x进行赋值,一种方法就是用前面的
λx. x+2 3.还有一种就是(λf.f 3)(λx.x+2),也就是说,我们把(λx.x+2)赋予f,那么就变成了(λx.x+2)作用在3上,也就是我们想要的 λx.x+2 3.
而双参函数也就是如此,比如说(λx.λy.x - y) 7 2,(λy.7 - y) 2与7-2等价。
再回到我们前面那句话吧,(λ该死.该死 该死)作用在(λ该死.该死 该死)上,也就是(λ该死.该死 该死)作用在(λ该死.该死 该死)之上,也就是 “该死(该死)”这个函数中,两个 “该死”分别替换为(λ该死.该死 该死)。那么又回到了起点,还是“(λ该死.该死 该死)(λ该死.该死 该死)”!我们就得到了这样一个无穷循环的作用!
在λ演算中,(λx.x x)被称为ω 组合子,((λx.x x)(λx.x x))被称为Ω,有专门的研究关于这类事情,这里就不再一一详谈了。但是这样的无限循环还是给LZ这样略懂皮毛的人带来了一定的乐趣。
I