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)
左から先に正常に評価された場合、うまくいくと確信していますが、よくわかりません。
前もって感謝します。