Я думаю, мне нужно немного проработать, как работает функция D в unlambda. Прямо сейчас я пытаюсь создать функцию (факториал) с помощью комбинатора Y, но это всегда приводит к некоторому бесконечному циклу. Или segfault, в зависимости от переводчика. Я уверен, что D - это то, что я хочу использовать здесь. Я попробовал это:
``d```sii``sii`.xi
и у него был тот же бесконечный цикл. Кто-нибудь думает, что они могут помочь мне понять D в unlambda?
...
В 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)
Я почти уверен, что, если бы он оценивался нормально, сначала слева, он бы работал, но я не уверен.
Заранее спасибо.