SICP – cap. 1 – Costruire astrazioni tramite procedure – esercizi – 21

ChyProseguo, un passo per volta, da qui oggi un nuovo esercizio, qui.

Exercise 1.17: The exponentiation algorithms in this section are based on performing exponentiation by means of repeated multiplication. In a similar way, one can perform integer multiplication by means of repeated addition. The following multiplication procedure (in which it is assumed that our language can only add, not multiply) is analogous to the expt procedure:

(define (* a b)
  (if (= b 0)
      0
      (+ a (* a (- b 1)))))

This algorithm takes a number of steps that is linear in b. Now suppose we include, together with addition, operations double, which doubles an integer, and halve, which divides an (even) integer by 2. Using these, design a multiplication procedure analogous to fast-expt that uses a logarithmic number of steps.

Introduco qui una nota personale, forse necessaria per chiarire il senso di questi post. Intanto –mi ripeto– il Lisp è poter fare finalmente quello che avrei voluto fare 40 anni orsono ma non c’era il tempo (e i mezzi). Venendo agli esercizi il bello è provare, pasticciare nella REPL e poi “metterli in bella”. Se hai fatto bene le cose, provando e riprovando, limando, aggiustando, … ottieni risultati che assomigliano a quelli dei nerds che linko. Loro sono forse più bravi, o più motivati, o –chissà 😳
Per cui ecco:

Adesso verrebbe da chiedersi chi ha copiato chi, ma forse no, quando il problema è semplice la soluzione tende a essere “quella” 😀

s34

Altra considerazione scema personale: dove lo trovate un altro linguaggio che vi permette di ridefinire quasi tutto? 😳 🙄

: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: