Unlambda d功能

时间:2010-11-28 02:57:26

标签: factorial promise

我想我需要详细说明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)

我很确定如果它被正常评估,左边第一个,它会起作用,但我不确定。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我真的没有看到d如何帮助推理因子功能,但是d做什么很容易说明:

 `.1` .2i => 21
``.1`d.2i => 12

在第一种情况下,.2会根据急切的评估规则在.1之前进行评估。
在第二种情况下,.2通过.1“受保护”,仅从外部进行评估。