2010-11-28 3 views
2

D 함수가 unlambda에서 작동하는 방법에 대해 자세히 설명해야한다고 생각합니다. 지금은 Y 결합 자로 함수 (팩토리얼)를 만들려고 노력하고 있지만 항상 무한 루프가 발생합니다. 또는 통역사에 따라 세그 폴트. 나는 D가 내가 여기서 사용하기를 원하는 것이라고 확신한다. 나는 이것을 시도했다 :Unlambda d function

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

그리고 그것은 같은 무한 루프를 가졌다. 아무도 내가 unlambda에서 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

답변

1

정말 d이 계승 기능을 도울 수있는 방법을 볼 수 없지만, d가 무엇의 그림은 간단하다의 이유로, 첫 번째 경우에

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

.2.1 전에 평가 열심 인 평가 규칙.
두 번째 경우 .2.1 "protected"를 통과하며 외부에서 평가됩니다.