我想我需要详细说明D函数在unlambda中的工作原理。现在我正在尝试使用Y组合器创建一个函数(阶乘),但它总是导致某种无限循环。或者段错误,取决于翻译。我很确定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``s``s`ks``s`kki``s``s`ks`ki`ki``s``s`ks``s`kki``s``s`ks`ki`ki
Factorial = Y(\xy.0y1(My(x(Sy))))
0 = ``s``s``si`k`ki`k``s``si`k`ki`kk`k`ki (Returns K if it's 0 in church numerals, Returns KI if it's something else.)
M = ``s`ksk (Prefix multiplier of church numerals)
S = ``s``si`k``s``s``s``si`ki`k`ki`k`ki`s``s`ksk`k`k`kk (Decrements a church integer)
我很确定如果它被正常评估,左边第一个,它会起作用,但我不确定。
提前致谢。
答案 0 :(得分:1)
我真的没有看到d
如何帮助推理因子功能,但是d
做什么很容易说明:
`.1` .2i => 21
``.1`d.2i => 12
在第一种情况下,.2
会根据急切的评估规则在.1
之前进行评估。
在第二种情况下,.2
通过.1
“受保护”,仅从外部进行评估。