2010-11-28 7 views
2

Я думаю, мне нужна какая-то разработка, как функция D работает в unlambda. Прямо сейчас я пытаюсь сделать функцию (факториал) с комбинатором Y, но это всегда приводит к некоторому бесконечному циклу. Или segfault, в зависимости от интерпретатора. Я почти уверен, что D - это то, что я хочу использовать здесь. Я пробовал это:Unlambda d function

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

и у него был такой же бесконечный цикл. Кто-нибудь думает, что они могут помочь мне понять 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) 

Я уверен, что если бы она была оценена, как правило, с левой первых, он будет работать, но я не уверен.

Заранее спасибо.

+2

Это как если бы этот язык был специально разработан для общения с Markdown ... – MPelletier 2010-11-28 03:35:31

ответ

1

Я не очень понимаю, как d может помочь факториала, но иллюстрация того, что d делает легко:

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

В первом случае .2 вычисляется перед .1, на основании правильное правило оценки.
Во втором случае .2 проходит через .1 «защищенный», только для оценки снаружи.