2

D関数がunlambdaでどのように機能するかについて、もう少し詳しく説明する必要があると思います。現在、Y コンビネータを使用して関数 (階乗) を作成しようとしていますが、常にある種の無限ループが発生します。または、インタープリターによってはセグメンテーション違反。ここで使用したいのは D だと確信しています。私はこれを試しました:

``d```sii``sii`.xi

そして、同じ無限ループがありました。unlambda で D を理解するのに役立つと思う人はいますか?

...

アンラムダ表記では、私の関数は

```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)

左から先に正常に評価された場合、うまくいくと確信していますが、よくわかりません。

前もって感謝します。

4

1 に答える 1

1

階乗関数がどのようdに役立つかdはわかりませんが、何ができるかを説明するのは簡単です。

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

最初のケースでは、先行評価ルールに基づいて、の .2前に評価されます。 2番目のケースでは、は「保護」を通過し、外部からのみ評価されます。.1
.2.1

于 2011-09-15T14:07:21.097 に答える