;; The first three lines of this file were inserted by DrRacket. They record metadata ;; about the language level of this file in a form that our tools can easily process. #reader(lib "htdp-intermediate-lambda-reader.ss" "lang")((modname svolgimento_lez5) (read-case-sensitive #t) (teachpacks ()) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ()))) ; funzione 'applicazione' + 'controllo dati' (define (check fn l) (if (null? l) #f (fn l) ) ) (define (check_list pred l) (if (<= (length l) 1) #t (and (pred (car l) (cadr l)) (check_list pred (cdr l)) ) ;che riassume: ;(if (pred (car l) (cadr l)) ; (check_list pred (cdr l)) ; #f ;) ) ) (define (mysquare x) (* x x)) (define (myinc x) (+ x 1)) ; versione di replace con gestione esplicita della ricorsione (define (myreplace l k v) (if (null? l) '() (if (eq? (car l) k) (cons v (myreplace (cdr l) k v)) (cons (car l) (myreplace (cdr l) k v)) ) ) ) ; versione di replace usando map (define (repl_builder k v) (lambda (x) (if (eq? x k) v x)) ) (define (myfreplace l k v) (map (repl_builder k v) l ) ) (define mrepl (repl_builder 2 4)) (define (inc_builder k) (lambda (x) (+ x k))) ; secondo la pura definizione di comportamento dell'interprete ; la seguente riga produce errore: il primo simbolo dopo la parentesi ; dovrebbe essere un identificatore di funzione, invece è qualcosa da valutare ; (NB: a seconda del libello di linguaggio scelto, l'interprete è più o meno tollerante) ;((inc_builder 3) 1) ; apply: scheme si aspetta una funzione f ed una *lista* di valori l, ; che corrispondono agli argomenti da passare ad f, ed applica f a quei valori (apply (inc_builder 3) (list 1)) ; a noi basta una versione semplificata su 1 argomento ... (define (mapply f x) (f x)) (define (mult-apply fl x) (if (null? fl) x (mapply (car fl) (mult-apply (cdr fl) x)) ) )