Scheme – Ricorsione di coda (min, max) –
AVVISO! Le informazioni di questo post potrebbero non essere più valide in quanto non aggiornate. Usa i commenti per contribuire a tenere il post aggiornato.
ULTIMA REVISIONE DEL POST: 24/04/2014
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)) )))