;; ATENȚIE! ;; Pentru a rula aceste exemple, alegeți Language/Other languages/Pretty Big ;; Ne implementăm propriile primitive într-un ;; limbaj de programare fictiv "lambda-0", ;; folosind doar Calcul Lambda. ;; Wow! ;; true e o funcție binară care întoarce mereu primul argument ;; false ... pe al doilea (define true-0 (λ (x y) x)) (define false-0 (λ (x y) y)) ;; not(T) = F not(F) = T ;(define not-0 ;; and(T, y) = y and(F, y) = F ;(define and-0 ;; or(T, y) = T or (F, y) = y ;(define or-0 ;; if(T, x, y) = x if(F, x, y) = y ;(define-syntax if-0 ; (syntax-rules () ; ( (_ pred true-exp false-exp) ; ;; artificiu pentru ca if să fie nestrictă ; ))) ;(define cons-0 ;; car(cons(x,y)) = ;(define car-0 ;; cdr(cons(x,y)) = ;(define cdr-0 (define null-0 (λ (x) true-0)) ;; null?(null) = ;; null?(cons(x,y)) = ;(define null-0? ;(define (append-0 A B) ; facem conversia în liste standard ; doar pentru vizualizare ;(define (list-0->std L) ;(append-0 (cons-0 'a (cons-0 'x null-0)) (cons-0 'y (cons-0 'z null-0))) ;(list-0->std (append-0 (cons-0 'a (cons-0 'x null-0)) (cons-0 'y (cons-0 'z null-0)))) ;(define zero-0 ;(define (succ-0 n) ;(define pred-0 ;(define zero-0? ;(define (take-0 L n) ;(list-0->std (take-0 (cons-0 'x (cons-0 'y (cons-0 'z (cons-0 't null-0)))) ; (succ-0 (succ-0 (succ-0 zero-0))))) ;(list-0->std (take-0 (cons-0 'x (cons-0 'y (cons-0 'z (cons-0 't null-0)))) ; (succ-0 (succ-0 (succ-0 (succ-0 (succ-0 zero-0)))))))