#lang racket (require racket/trace) (define (f x) (if (zero? x) 0 (+ 1 (f (sub1 x))))) (trace f) ; se va face apel pentru toate apelurile lui f (f 5) (define (f1 x) (when (= x 2) (trace f1)) ; trace doar după ce intru în f cu x=2 (if (zero? x) 0 (+ 1 (f1 (sub1 x))))) (f1 5) (define (ftail x r) (if (zero? x) r (ftail (sub1 x) (+ 1 r)))) (trace ftail) (ftail 5 0) (define curry+ (λ (x) (λ (y) (+ x y)))) (map (curry+ 1) '(1 2 3)) (filter ((curry member) 2) ; "Care dintre liste conțin elementul 2" '((1 2 3 4 5) (2 4 6 8) (5 3 1) (6 4 1) (10 2))) ; '((1 2 3 4 5) (2 4 6 8) (10 2)) (define (mapfilter fMap fFilter L) (foldr (λ (elem rezP) (if (fFilter elem) (cons (fMap elem) rezP) rezP )) '() L)) (mapfilter ((curry +) 10) odd? '(1 2 3 4 5 6)) ; '(11 13 15) ; dacă vreau să fac trace la funcția din fold: (define (mapfilterT fMap fFilter L) (define ffold (λ (elem rezP) (if (fFilter elem) (cons (fMap elem) rezP) rezP ))) (trace ffold) (foldr ffold '() L)) (mapfilterT ((curry +) 10) odd? '(1 2 3 4 5 6))