Archivio

Posts Tagged ‘ricorsione di coda’

Scheme – Ricorsione di coda (min, max) –

8 Agosto 2010 Nessun commento
1 Star2 Stars3 Stars4 Stars5 Stars (Ancora nessun voto)
Loading...

Definisci in Scheme un programma su una procedura ricorsiva di coda, più eventuali procedure non ricorsive, per trovare minimo e massimo da una lista.

(define mix
  (lambda (m n)
    (if (< m n)
        m
        n)
    ))

(define max
  (lambda (m n)
    (if (> m n)
        m
        n)
    ))

(define f
  (lambda (txt)
    (f-tr txt (car txt) (car txt))
    ))

(define f-tr
  (lambda (t m n)
    (if (null?  (cdr t)) (list m n)
    (f-tr (cdr t) (mix m (mix (car t) (cadr t))) (man n (man (car t) (cadr t))))
    )))

(f '(2 3 4 1 5 4 3 7 9 10))

Altra soluzione assai più esigua che utilizza molto l’ingegno ;)

(define min-max
  (lambda (nums)
    (min-max-tr (car nums) (car nums) (cdr nums))
    ))

(define min-max-tr
  (lambda (min max nums)
    (if (null? nums)
        (list min max)
        (min-max-tr
         (if (< (car nums) min) (car nums) min)
         (if (> (car nums) max) (car nums) max)
         (cdr nums))
        )))

Programmazione in Scheme

25 Luglio 2010 Nessun commento
1 Star2 Stars3 Stars4 Stars5 Stars (Ancora nessun voto)
Loading...

Soluzione del problema con Scheme implementata da me:


(define shared
 (lambda (g h)
 (shared_com g h null )
 ))

(define shared_com
 (lambda (u v t)
 (cond ((=(length u) 0) t)
 ((=(length v) 0) t)
 ((= (car u) (car v)) (append t (list(car u)) (shared_com (cdr u) (cdr v) t)))
 ((> (car u) (car v)) (shared_com u (cdr v) t))
 ((< (car u) (car v)) (shared_com (cdr u) v t))
 )
 ))

(shared '(1 3 5 6 7 8 9 10) '(0 1 2 3 4 5 7 9))

Soluzione del problema proposta a lezione

(define shared
  (lambda (u v)
    (cond ((or (null? u) (null? v)) null)
          ((< (car u) (car v)) (shared (cdr u) v))
          ((> (car u) (car v)) (shared u (cdr v)))
          (else (cons (car u) (shared (cdr u) (cdr v))))
          )))