Lambda hesablaması: Redaktələr arasındakı fərq

Silinən məzmun Əlavə edilmiş məzmun
Sətir 28:
: <tt>g := λr. λn.(1, if n = 0; else n × (r r (n-1)))</tt>
: <tt>f := g g</tt>
 
Bu, [[faktorial]] hesablama problemini həll edir, lakin ümumi bir [[həll]] də mümkündür. Rekursiv bir funksiya və ya dövrü təmsil edən bir lambda müddəti alaraq, özünü ilk dəlil olaraq keçərək sabit nöqtəli kombinator lazımi rekursiv funksiyanı və ya dövrü geri qaytaracaqdır. Funksiyaların hər dəfə açıq şəkildə özlərini keçməsinə ehtiyac yoxdur.
 
[[Sabit]] nöqtəli kombinatorların bir neçə tərifi var. Onlardan ən sadəsi:
 
: <tt>Y = λg.(λx.g (x x)) (λx.g (x x))</tt><tt> lambda hesablamasında, <math>\operatorname{Y\ g}</math> — sabit nöqtə <math>\operatorname{g}</math>; bunu nümayiş etdirir:</tt>
 
:Y g</tt>
:(λh.(λx.h (x x)) (λx.h (x x))) g
:(λx.g (x x)) (λx.g (x x))
:g ((λx.g (x x)) (λx.g (x x)))
:g (Y g).</tt> İndi [[Faktorial|faktorialı]] müəyyən etmək üçün, rekursiv funksiyası olaraq sadəcə yaza bilərik<math>\operatorname{g\ (Y\ g)} n</math>,hardaki, <math>n</math> — nömrə hansıki [[Faktorial|faktorialın]] hesablandlğı nömrədir. <math>n = 4</math>,əldə edirik:
 
g (Y g) 4
(λfn.(1, if n = 0; and n·(f(n-1)), if n>0)) (Y g) 4
(λn.(1, if n = 0; and n·((Y g) (n-1)), if n>0)) 4
1, if 4 = 0; and 4·(g(Y g) (4-1)), if 4>0
4·(g(Y g) 3)
4·(λn.(1, if n = 0; and n·((Y g) (n-1)), if n>0) 3)
4·(1, if 3 = 0; and 3·(g(Y g) (3-1)), if 3>0)
4·(3·(g(Y g) 2))
4·(3·(λn.(1, if n = 0; and n·((Y g) (n-1)), if n>0) 2))
4·(3·(1, if 2 = 0; and 2·(g(Y g) (2-1)), if 2>0))
4·(3·(2·(g(Y g) 1)))
4·(3·(2·(λn.(1, if n = 0; and n·((Y g) (n-1)), if n>0) 1)))
4·(3·(2·(1, if 1 = 0; and 1·((Y g) (1-1)), if 1>0)))
4·(3·(2·(1·((Y g) 0))))
4·(3·(2·(1·((λn.(1, if n = 0; and n·((Y g) (n-1)), if n>0) 0))))
4·(3·(2·(1·(1, if 0 = 0; and 0·((Y g) (0-1)), if 0>0))))
4·(3·(2·(1·(1))))
24
 
== Proqramlaşdırma dillərində ==