SICP – cap. 2 – introduzione a data abstaction -esercizi – 2

micmord

Continuo a copiare, qui.

Exercise 2.1.  Define a better version of make-rat that handles both positive and negative arguments. make-rat should normalize the sign so that if the rational number is positive, both the numerator and denominator are positive, and if the rational number is negative, only the numerator is negative.

s142

OK, adesso non va; ma è semplice, basta controllare il segno del denominatore: se negativo cambiare quello del numeratore.
Ecco il mio test per normalizzare il segno:

s143

OK, facile, adesso basta mettere il tutto dentro make-rat 😀
Però ho usato la procedura negative? di cui non si era mai parlato; bastava fare come Bill the Lizard, (< d 0):

(define (make-rat n d)
  (let ((g (gcd n d)))
    (if (< d 0)
        (cons (/ (* n -1) g) (/ (* d -1) g))
        (cons (/ n g) (/ d g)))))

s144

Diverso e più sintetico sicp-ex ma meno intuitivo, ci sarebbero problemi nell’eventuale manutenzione.

Perso: sono molto contento che –a parte l’uso del predicato non necessario– la mia soluzione sia uguale a quella di Bill, il mio lisper preferito (pari merito con tanti altri, nèh 😉 Ma –oggettivamente– non era difficile, anzi 😀

:mrgreen:

Posta un commento o usa questo indirizzo per il trackback.

Trackback

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google photo

Stai commentando usando il tuo account Google. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Questo sito utilizza Akismet per ridurre lo spam. Scopri come vengono elaborati i dati derivati dai commenti.

%d blogger hanno fatto clic su Mi Piace per questo: