;; Questo file contiene il codice Scheme che risolve ;; alcuni degli esercizi svolti in classe - 17/10/02 ;; Conversioni fra prezzi in euro e prezzi in lire (define rapporto-conversione 1936.27) (define prezzo-euro (lambda (prezzo-lire) (/ prezzo-lire rapporto-conversione) )) (define prezzo-lire (lambda (prezzo-euro) (* prezzo-euro rapporto-conversione) )) (define convertitore (lambda (valuta prezzo) (if (equal? valuta 'lire) (prezzo-euro prezzo) (if (equal? valuta 'euro) (prezzo-lire prezzo) 0 ; valuta sconosciuta ) ) )) ;; Calcolo dell'IRPEF sulla base delle istruzioni Unico2002. ;; ;; Lo scopo dell'esempio e' riflettere sull'organizzazione ;; del codice e sull'astrazione procedurale. ;; L'astrazione procedurale comporta la separazione ;; della logica del calcolo, che viene mantenuta nel tempo, ;; dai parametri specifici, che variano di anno in anno. ;; Vanno osservate, in particolare, la definizione della ;; procedura "tassa" e le modalita' di calcolo delle imposte ;; base dei vari scaglioni di reddito ;; Calcolo dell'imposta, noto lo scaglione del reddito: (define tassa (lambda (imponibile inf-scaglione base-scaglione aliquota) (+ base-scaglione (* aliquota (- imponibile inf-scaglione))) )) ;; Calcolo dell'imposta in generale: (define irpef (lambda (imponibile) (cond ((< imponibile inf-scaglione-2) (tassa imponibile inf-scaglione-1 base-scaglione-1 aliquota-1) ) ((< imponibile inf-scaglione-3) (tassa imponibile inf-scaglione-2 base-scaglione-2 aliquota-2) ) ((< imponibile inf-scaglione-4) (tassa imponibile inf-scaglione-3 base-scaglione-3 aliquota-3) ) ((< imponibile inf-scaglione-5) (tassa imponibile inf-scaglione-4 base-scaglione-4 aliquota-4) ) (else (tassa imponibile inf-scaglione-5 base-scaglione-5 aliquota-5) ) ) )) ;; Limiti inferiori degli scaglioni di reddito ;; e corrispondenti aliquote: (define inf-scaglione-1 0) (define inf-scaglione-2 20000) (define inf-scaglione-3 30000) (define inf-scaglione-4 60000) (define inf-scaglione-5 135000) (define aliquota-1 0.18) (define aliquota-2 0.24) (define aliquota-3 0.32) (define aliquota-4 0.39) (define aliquota-5 0.45) ;; calcolo dell'imposta base relativa al limite inferiore ;; dello scaglione: (define base-scaglione-1 0 ; minimo reddito imponibile considerato ) (define base-scaglione-2 (tassa inf-scaglione-2 inf-scaglione-1 base-scaglione-1 aliquota-1) ) (define base-scaglione-3 (tassa inf-scaglione-3 inf-scaglione-2 base-scaglione-2 aliquota-2) ) (define base-scaglione-4 (tassa inf-scaglione-4 inf-scaglione-3 base-scaglione-3 aliquota-3) ) (define base-scaglione-5 (tassa inf-scaglione-5 inf-scaglione-4 base-scaglione-4 aliquota-4) ) ;; Miscellanea di semplici esempi ed esercizi ;; Rapporto altezza/base che realizza ;; una similitudine fra rettangoli (define ratio (lambda (alpha) (/ (- (sqrt (+ (* alpha alpha) 4)) alpha) 2) ) ) ;; Quadrato di un numero (define square (lambda (x) (* x x)) ) ;; Costante pi greco (define pi-greco 3.141592654) ;; Volume del cilindro (define cylinder-volume (lambda (radius height) (* (* pi-greco (square radius)) height) ) ) ;; Lato maggiore dei fogli in formato Ak (define sqrt-2 (sqrt 2)) (define A-format-height (lambda (k) (/ (sqrt sqrt-2) (expt sqrt-2 k)) ) ) ;; Entita' del campo elettrico relativo a una distribuzione ;; uniforme di carica su una superficie sferica (define inside-sphere (lambda (distance radius) (< distance radius) ) ) (define electric-field (lambda (charge radius distance) (if (inside-sphere distance radius) 0 (/ charge (square distance)) ) ) ) ;; Convenevoli (define say-good-bye (lambda (who) (string-append "Good bye " who) ) ) (define say-hi (lambda (who) (string-append "Hi " who) ) ) (define be-kind-with (lambda (who) (string-append (say-hi who) ", how are you?") ) ) ;; Chi applica queste procedure? (define ask-him (lambda (he she) (string-append (string-append "You, " he) (string-append (string-append ", do you want to marry " she) "?") ) ) ) (define ask-her (lambda (she he) (string-append (string-append "and you, " she) (string-append (string-append ", do you want to marry " he) "?") ) ) )