Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
;; ESEMPI SULLE STRUTTURE IN SCHEME
;; definizione define-struct
;; costruttore make-
;; selettore
;; verifica sulla struttura:
;; ?
;; Esempi con struttura predefinita
;;;;;;; Struttura posn ;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Esercizio:
;; Determinare, dati 2 posn, se
;; questi due punti coincidono
;; stessopunto?: posn posn -> boolean
(define (stessopunto? p1 p2)
(and (= (posn-x p1) (posn-x p2))
(= (posn-y p1) (posn-y p2))))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Esercizio:
;; Determinare, dati 2 posn, quale sia
;; la loro distanza nella metrica euclidea
(define (distanza p1 p2)
(sqrt (+
(square
(- (posn-x p1) (posn-x p2)))
(square
(- (posn-y p1) (posn-y p2))))))
; (distanza (make-posn 1 1) (make-posn 3 3) )
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Esercizio:
;; Determinare, dato un posn, la
;; sua distanza (nella metrica euclidea)
;; rispetto all'origine
(define (distdaorigine p)
(distanza (make-posn 0 0) p))
;;;;;;;;;;;
;; Esercizio: dati due posn che
;; definiscono una retta, stabilire se
;; questa passa dall'origine
;; y = mx+q dove m = (y2-y1)/(x2-x1)
;; la risposta e': true se q=0, false
;; altrimenti
;; q=y1-m*x1
(define (attr-origine? p1 p2)
(= (- (posn-y p1)
(* (/ (- (posn-y p2) (posn-y p1))
(- (posn-x p2) (posn-x p1)))
(posn-x p1))) 0))
;;;;;;;;;; DEFINIZIONE DI STRUTTURE
(define-struct studente
(nome
cognome
matricola
mediavoto
nesami))
;; costruttore: esempio (make-
;; selettore
;; esercizio:
;; Implementare una procedura di aggiornamento
;; della media voto di uno studente
(define (aggmedia stud voto)
(make-studente
(studente-nome stud)
(studente-cognome stud)
(studente-matricola stud)
(/ (+ (* (studente-mediavoto stud)
(studente-nesami stud))
voto)
(+ (studente-nesami stud) 1))
(+ (studente-nesami stud) 1)))
;; esempi
;;(studente-mediavoto (aggmedia (make-studente 'rob 'luc 1654 20 1) 30))
;; Esercizio: implementare i controlli sui tipi della struttura studente
;;(studente? (make-studente 'rob 'luc 1654 20 1))
;;(define (type studente) (.... controllo tipi ...)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Versione ottimizzata di Fb
;; fb contiene: in fbn la valutazione
;; di fibonacci di n, fbn-1 quella per
;; n-1
(define-struct fb (fbn fbn-1))
;; (Fibonacci)
(define (Fibonacci n)
(fb-fbn (Fib n)))
;; Fib: number -> fb
(define (Fib n)
(cond
[(= n 0) (make-fb 1 0)]
[(= n 1) (make-fb 1 1)]
[else (accumula (Fib (- n 1)))]))
(define (accumula Fibn-1)
(make-fb
(+ (fb-fbn Fibn-1)
(fb-fbn-1 Fibn-1))
(fb-fbn Fibn-1)))
;; Verificare la differenza di complessita'
;; fra Fibonacci e Fb
;; funzioni generiche
;; Implementare perimetro, la
;; f.ne che calcola il perimetro
;; di una figura geometrica
(define-struct cerchio (centro raggio))
(define-struct quadrato (lato))
(define (perimetro figura)
(cond
[(cerchio? figura)
(perimetro-cerchio figura)]
[(quadrato? figura)
(perimetro-quadrato figura)]
[else 'Errore]))
(define (perimetro-cerchio c)
(* 2 (* 3.14 (cerchio-raggio c))))
(define (perimetro-quadrato q)
(* 4 (quadrato-lato q)))