Racket CheatSheet
Laborator 3
Funct, ii anonime (lambda) s, i funct, ii cu nume Funct, ionalele foldl s, i foldr Funct, ionala map
(lambda (arg1 arg2 ...) rezultat) (fold* funct, ie acumulator listă) (map funct, ie listă)
(define nume val) funct, ie → (lambda (element acumulator’) (map funct, ie lista1 lista2 ...)
1 (lambda (x) x) functia identitate acumulator”) Transformă independent elementele de pe pozit, ii diferite
2 ((lambda (x) x) 2) 2 aplicare functie Îmbină toate elementele unei liste pentru a construi o ale uneia sau mai multor liste. Întoarce o listă cu acelas, i
3 (define idt (lambda (x) x)) legare la un nume
4 (define (idt x) x) sintaxa alternativa valoare finală, pornind de la un acumulator init, ial. Într- număr de elemente ca lista/ listele date ca parametru.
5 (idt 3) 3 un pas, funct, ia dată ca parametru combină elementul
6 curent din listă cu acumulatorul, ı̂ntorcând un nou acu- • Pentru o singură listă, aplică funct, ia, pe rând asu-
7 ((if true + -) (+ 1 2) 3) 6 if-ul se evaluează
mulator. Acumulatorul final este ı̂ntors ca rezultat al pra fiecărui element: (map f (list e1 . . . en )) →
8 la o funct, ie (list (f e1 ) . . . (f en ))
9
funct, ionalelor fold*. Acesta poate fi chiar o listă.
10 (define (comp f g) funct, ia de
• foldr (right) poate fi ı̂nt, eleasă cel mai us, or • Pentru mai multe liste de aceeas, i lungime,
11 (lambda (x) compunere (◦)
12 (f (g x)))) a altor 2 funct, ii prin faptul că funct, ia dată ca parametru se sub- funct, ia este aplicată la un moment dat asu-
13
stituie lui cons, iar acumulatorul init, ial, lis- pra tuturor elementelor de pe aceeas, i pozit, ie:
14 ((comp car cdr) '(1 2 3)) 2 car ◦ cdr (map f (list e11 . . . e1n ) . . . (list em1 . . . emn )) →
15
tei vide de la finalul listei. Prin urmare, ele-
mentele listei sunt prelucrate de la dreapta la (list (f e11 . . . em1 ) . . . (f e1n . . . emn ))
16 ((comp (lambda (x) (+ x 1)) 11 inc ◦ dublare
17 (lambda (x) (* x 2))) stânga: (foldr f acc (list e1 . . . en )) → Există s, i funct, ionalele andmap s, i ormap. Prima se asi-
18 5) (f e1 (f . . . (f en acc) . . .)) gură că, ı̂n urma aplicării lui map, toate rezultatele sunt
Funct, ii curried / uncurried • foldl (left) prelucrează elementele de la stânga diferite de false, iar a doua, că cel put, in un rezultat
la dreapta: (foldl f acc (list e1 . . . en )) → este diferit de false.
1 (define add-uncurried parametri luat, i
2 (lambda (x y) simultan
(f en (f . . . (f e1 acc) . . .)) 1 (map (lambda (x) (* x 10)) '(1 2 3)) '(10 20 30)
2 (map * '(1 2 3) '(10 20 30)) '(10 40 90)
3 (+ x y)))
4
Se pot furniza mai multe liste, caz ı̂n care comportamen- 3 (map list '(1 2 3)) '((1) (2) (3))
tul este similar cu cel al lui map pe mai multe liste. 4 (map list '(1 2) '(3 4)) '((1 3) (2 4))
5 (add-uncurried 1 2) 3
5
6
6 (define (mult-by q) ; Curried
7 (define add-curried parametri luat, i
7 (lambda (x)
8 (lambda (x) succesiv
8 (* x q)))
9 (lambda (y)
9 (map (mult-by 5) '(1 2 3)) '(5 10 15)
10 (+ x y))))
11
12 ((add-curried 1) 2) 3
13
Funct, ionala apply
14 (define inc (add-curried 1)) aplicat, ie part, ială (apply funct, ie listă arg)
Perspective asupra funct, iilor binare curried : 1 (foldr + 0 '(1 2 3)) 6 (apply funct, ie arg 1 ... arg n listă arg)
• Iau parametrii pe rând”, fiind aplicabile part, ial. Aplică o funct, ie asupra parametrilor dat, i de elementele
” unei liste. Opt, ional, primii parametri ai funct, iei ı̂i pot fi
• Iau un parametru s, i ı̂ntorc o altă funct, ie de un
furnizat, i individual lui apply, ı̂naintea listei cu restul
parametru.
parametrilor. (apply f x1 . . . xm (list e1 . . . en )) →
(f x1 . . . xm e1 . . . en )
Funct, ionala filter
1 (apply + '(1 2 3)) 6 suma
(filter funct, ie listă) 2 (apply + 1 '(2 3)) 6 la fel
2 (foldl + 0 '(1 2 3)) 6
Păstrează dintr-o listă elementele pentru care funct, ia 3 (foldr cons '() '(1 2 3)) '(1 2 3) identitate! 3 (apply list '(1 2 3)) '(1 2 3)
4 (foldl cons '() '(1 2 3)) '(3 2 1) inversare 4 (apply list '(1 2 3) '(5 6 7)) '((1 2 3) 5 6 7)
NU ı̂ntoarce false. (filter f (list e1 . . . en )) →
5 (foldl (lambda (x y acc) 21 2 liste
(list ei1 . . . eim ), cu (f eik ) 6→ false. 6 (+ x y acc))
1 (filter even? '(1 2 3)) '(2) 7 0 '(1 2 3) '(4 5 6))