(define l1 '(1 2 3 4 5)) (define (sab x y) (+ x y) ) (define (sab1 x) (lambda (y) (+ x y) ) ) (define (poredipoz) (lambda (x y) (cond ((< x y) -1) ((= x y) 0) (else 1) ) ) ) (define (poredineg) (lambda (x y) (cond ((> x y) -1) ((= x y) 0) (else 1) ) ) ) ; f-ja viseg reda. zasto? zato sto prihvata ; neku drugu f-ju kao argument. (define (poredi x y f) ((f) x y) ) ; (poredi 2 3 poredneg) ; (poredi 2 3 poredpoz) ; arg. su lista i unarna f-ja, koja predstavlja ; transformaciju primenjenu nad svakim el. liste ; mymap: D^N->G^N (define (mymap l f) (cond ((null? l) null) (else (cons (f (car l)) (mymap (cdr l) f))) ) ) ; inkrementacija svakog elemnta liste ; (mymap l1 (lambda (x) (+ x 1))) ; druga f-ja viseg reda koju cemo razmatrati je: ; tzv. filter f-ja. ; arg. f-je su: lista, kriterijum (nuzno unarna logicka f-ja) ; myfilter: D^N->D^M, M<=N (define (myfilter l k) (cond ((null? l) null) ((k (car l)) (cons (car l) (myfilter (cdr l) k))) (else (myfilter (cdr l) k)) ) ) ; primer primene: ;(myfilter l1 (lambda (x) (< x 4))) ; 3. f-ja viseg reda je tzv. fold ; fold agregira listu i od nje pravi samo objekat nizeg reda ; pod obj. nizeg reda se misli npr., da od ugnjezdene liste ; pravi obicnu listu, ili od obicne liste pravi konstantan izraz ; myfold: D^N->G (define (myfoldr l b e) (cond ((null? l) e) (else (b (car l) (myfoldr (cdr l) b e))) ) ) ; myfoldl je isti, samo sto je rekurzivni poziv obrnut, ; tj. nalazi se sa leve strane ; primeri upotrebe na sabiranju i mnozenju: ; (myfoldr l1 (lambda (x y) (+ x y)) 0) ; (myfoldr l1 (lambda (x y) (* x y)) 1) ; duzina liste ; (myfoldr l1 (lambda (x y) (+ 1 y)) 0) ; posl. element liste ;(myfoldr l1 (lambda (x y) (cond ((null? y) x)(else y))) null) ; clan liste da/ne ; (myfoldr l1 (lambda (x y) (or (= x 6) y)) #f) -> #f ; (myfoldr l1 (lambda (x y) (or (= x 4) y)) #f) -> #t