我想我需要在unlambda中详细说明D函数是如何工作的。现在,我正在尝试用Y组合器创建一个函数(阶乘),但它总是导致某种类型的无限循环。或者segfault,这取决于解释器。我非常确定D就是我想要在这里使用的。我试过这个:
``d```sii``sii`.xi
它也有同样的无限循环。有人认为他们可以帮助我理解unlambda中的D吗?
..。
在unlambda表示法中,我的函数是
```s``s``s`ks``s`kki``s``s`ks`ki`ki``s``s`ks``s`kki``s``s`ks`ki`ki``s`k`s``s``s``s``si`k`ki`k``s``si`k`ki`kk`k`ki`k`s`sk``s`k`s``s`ksk``s``s`ksk`k``s``si`k``s``s``s``si`ki`k`ki`k`ki`s``s`ksk`k`k`kk
Y= s
ss`ks
skki``s``s
kski
kis
sks``s
kkis
sks
ki`ki
阶乘=Y(\xy.0y1(My(x(Sy)
0= s
ssi`k`ki`k
ssik
kikk
k`ki (如果教堂数字为0,则返回K;如果是其他值,则返回KI。)
M= s`ksk (教堂数字的前缀乘数)
S= s
sik``s``s``s``si
kik
kik
kis``s
kskk
k`kk (递减教会整数)
我非常确定,如果它是正常评估的,首先是左边,它会起作用,但我不确定。
提前谢谢。
发布于 2011-09-15 22:07:21
我真的看不出d
如何帮助阶乘函数,但d
的用途演示起来很简单:
`.1` .2i => 21
``.1`d.2i => 12
在第一种情况下,基于eager评估规则,在.1
之前评估.2
。
在第二种情况下,通过.1
"protected“传递.2
,仅从外部进行评估。
https://stackoverflow.com/questions/4295091
复制相似问题