Promisiunile sunt valori de prim rang în Racket. force: * la primul apel pe o anumită promisiune evaluează promisiunea și reține rezultatul * la apelurile ulterioare întoarce rezultatul calculat anterior Dacă conținutul promisiunii este transparent referențial, atunci orice evaluare a lui are exact același efect / același rezultat. * atunci, putem să reținem acest rezultat fără a ami calcula conținutul promisiunii de fiecare dată. Utilizarea promisiunilor are sens doar atunci când conținutul promisiunii este fără efecte laterale (este transparent referențial). Reținerea rezultatului pentru un calcul -- memoizare. ======================= 0 1 2 ... + + + 1 1 1 ... = = = 0 1 2 3 ... naturals2 primul element: 0 al doilea element este 1 + primul element din naturals2 -- pe care îl am și este 0 deci al doilea element este 1 al treilea element este 1 + al doilea element din naturals2 -- pe care (acum) îl știu și este 1 deci al treilea este 2 ... naturals2 = (0 . promisiune#1) {s-zip ones naturals2} ; necalculată cdr naturals2 = force promisiune#1 obține car ones - este 1, car naturals2 - este 0 = (1 . promisiune#2) {s-zip (s-cdr ones) (s-cdr naturals2) } acum, naturals2 = (0 . (1 . promisiune#2)) cddr naturals2 -> force promisiune#2 (se realizează apelul de s-zip) obține cadr ones - este 1, cadr naturals2 - este 1 = (2 . promisiune#3) { s-zip (s-cddr ones) (s-cddr naturals2) } ... puterile lui 2: 1 2 4 * * * 2 2 2 2 4 8