(define-struct istante (ore minuti secondi)) ;; Un istante e' una struttura della forma ;; (make-istante h m s), dove ;; - h e' un numero compreso tra 0 e 23 ;; - m e s sono numeri compresi tra 0 e 59 ;; secdamezzanotte: istante -> numero (define (secdamezzanotte i) (+ (* (+ (* (istante-ore i) 60) (istante-minuti i)) 60) (istante-secondi i))) ;(secdamezzanotte (make-istante 0 0 52)) ; 52 ;(secdamezzanotte (make-istante 0 2 0)) ; 120 ;(secdamezzanotte (make-istante 1 0 0)) ; 3600 ;(secdamezzanotte (make-istante 1 2 2)) ; 3722 ;; incrementa: istante numero -> istante ;; aggiunge x secondi all'istante i ;; suppongo x >= 0 ;(define (incrementa i x) ; (make-istante ... ; ... ; ...)) ;; areaquadrato: numero -> numero (define (areaquadrato l) (* l l)) ;(areaquadrato 'mioquadrato) ;;; f: any -> ... ;(define (f x) ; (cond ; [(number? x) ...] ; [(symbol? x) ...] ; [(boolean? x) ...] ; [(string? x) ...] ; ....)) ; areaquadratosicura: any -> numero (define (areaquadratosicura x) (cond [(number? x) (areaquadrato x)] [else (error 'areaquadratosicura "Applicazione della funzione ad un dato non numerico!")])) ;(areaquadratosicura 5) ; 25 ;(areaquadratosicura 'ciao) ; errore (define-struct quadrato (nw lato)) ;; Un quadrato e' una struttura ;; (make-quadrato p l), dove ;; - p e' un posn (indica la posizione dell'angolo in alto a sx nella finestra) ;; - l e' un numero (lunghezza del lato) (define-struct cerchio (centro raggio)) ;; Un cerchio e' una struttura ;; (make-cerchio c r), dove ;; - c e' un posn ;; - r e' un numero ;; Una figura_geometrica e' ;; - un quadrato, oppure ;; - un cerchio ;;; perimetro_quadrato: quadrato -> numero ;(define (perimetro_quadrato q) ; (* 4 (quadrato-lato q))) ; ;;(perimetro_quadrato (make-quadrato (make-posn 0 0) 1)) ;;(perimetro_quadrato (make-quadrato (make-posn 0 0) 3)) ; ;;; perimetro-cerchio: cerchio -> numero ;(define (perimetro_cerchio c) ; (* 2 pi (cerchio-raggio c))) ; ;;(perimetro_cerchio (make-cerchio (make-posn 0 0) 1)) ;;(perimetro_cerchio (make-cerchio (make-posn 0 0) 100)) ;; perimetro_cerchio: cerchio -> stringa (define (perimetro_cerchio c) "sono in perimetro_cerchio") ;; perimetro_quadrato: quadrato -> stringa (define (perimetro_quadrato c) "sono in perimetro_quadrato") ;; perimetro: figura_geometrica -> numero (define (perimetro x) (cond [(quadrato? x) (perimetro_quadrato x)] [(cerchio? x) (perimetro_cerchio x)])) ;(perimetro (make-quadrato (make-posn 0 0) 4)) ;; f: figura_geometrica ... -> ... (define (f x) (cond [(quadrato? x) (f_quadrato x ...)] [(cerchio? x) (f_cerchio x ...)]))