#lang racket ; ------------------Expresii------------------ ; expresie = (f e1 e2 .. en) ;(+ 6 (- (* 5 2) 3) 1) ; ------------------Define------------------ ; (define identificator expresie) ;(define PI 3.14159265) ;(define r 5) ;(define area (* PI r r)) ; ------------------Funcții------------------ ; funcții anonime: (lambda listă-parametri corp) ; Ex: λx.x - în Calcul Lambda ; Ex: λx.λy.(x y) - în Calcul Lambda ; de definit și de aplicat pe valori "cu sens" (define arithmetic-m (λ (x y) (/ (+ x y) 2))) ;(arithmetic-m 6 12) ; (define (f x y ... ) corp) (define (arithmetic-mean x y) (/ (+ x y) 2)) (define (sum-of-squares x y) (+ (sqr x) (sqr y))) ;(sum-of-squares (+ 1 2) (* 3 5)) ; ------------------Perechi------------------ ; constructor: cons ; selectori: car, cdr ; (cons (cons 1 2) 'a) ; (cons + 3) ; (car (cons (cons 1 2) 5)) ; (cdr '(4 . b)) ; Ex: Folosind perechi, să de definească ; TDA-ul Complex (numere complexe), prin: ; - constructorul complex ; - operatorii real, imag, addC ; ------------------Liste------------------ ; constructori: null, cons, list ; selectori: car, cdr ; alte operații: null?, length, append ; (car (list 1 'a +)) ; (cdr '(2 3 4 5)) ; (null? '()) ; (length (list)) ; (append (cons 1 '(2)) '(a b)) ; Ex: Reimplementare Complex folosind liste ; ------------------Valori booleene------------------ ; constructori: #t, #f ; operatori: and, or, not ;(not (null? '(0))) ;(not 5) ;(and (= 3 4)) ;(and 'a 'b) ;(and) ;(or #t (/ 1 0)) ;(or 5 #t) ;(or) ; ------------------Operatori condiționali------------------ ; (if conditie rez-then rez-else) ; (if (null? '(1)) ; (/ 1 0) ; (- 7 1)) ; (cond (cond1 rez1) (cond2 rez2) ... ) (define L '(1 2 3)) (define val (cond ((null? L) 0) ((null? (cdr L)) (/ 1 0)) (else 'other))) ;val ; ------------------Recursivitate------------------ ; Traducere din axiome: ; sum([]) = 0 ; suma elementelor din lista vidă este 0 ; sum(x:l) = x + sum(l) ; suma elementelor din lista cons(x,l) este x + suma elementelor din l ;(sum '(1 2 3)) ; Ex: my-take ; L = '(1 2 3 4 5 6 7) ; n = 4 ; r = '(1 2 3 4) ; 1) După ce variabile fac recursivitatea? ; (ce variabile își schimbă valoarea de la un apel la altul?) ; (my-take L n) ;- ajută (cdr L)? ; 2) Scrie condiția de oprire pentru fiecare asemenea variabilă ; (constructori nulari și externi). ; axiome: ; 3) Scrie ce se întâmplă când problema nu este încă elementară ; (constructori interni, care generează obligatoriu ; cel puțin un apel recursiv). ; axiome: ;(my-take (range 2 10) 20) ;(my-take (range 2 10) 3)