2010-11-28 13 views
2

Ich denke, ich brauche etwas Ausarbeitung darüber, wie die D-Funktion in unlambda funktioniert. Im Moment versuche ich eine Funktion (faktoriell) mit dem Y-Kombinator zu machen, aber es ergibt sich immer eine Art Endlosschleife. Oder segfault, abhängig vom Interpreter. Ich bin mir ziemlich sicher, D ist, was ich hier benutzen möchte. Ich habe das versucht:Unlambda d Funktion

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

und es hatte die gleiche Endlosschleife. Glaubt jemand, sie könnten mir helfen, D in unambda zu verstehen?

...

In unlambda Notation, meine Funktion ist

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

Ich bin ziemlich sicher, dass, wenn es normal bewertet wurde, mit dem linken ersten, es würde funktionieren, aber ich bin nicht sicher.

Vielen Dank im Voraus.

+2

Es ist, als ob diese Sprache speziell entworfen wurde, um mit Markdown ... – MPelletier

Antwort

1

ich nicht wirklich sehen, wie d eine Fakultäts-Funktion helfen könnte, aber eine Darstellung dessen, was d tut, ist einfach:

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

Im ersten Fall wird .2 vor .1 ausgewertet, die aus Gründen der eifrige Bewertungsregel. Im zweiten Fall wird .2 durch .1 "geschützt" weitergegeben, nur um von außen ausgewertet zu werden.