Scheme – Ricorsione di coda (min, max) –
8 Agosto 2010
Nessun commento
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))
)))

