SICP – cap. 2 – cosa s’intende per dati? – esercizi – 8

nikon-small-world-mouse-retinal-ganglion-cells

Continuo a copiare, oggi qui.

Exercise 2.5: Show that we can represent pairs of nonnegative integers using only numbers and arithmetic operations if we represent the pair a and b as the integer that is the product 2a3b. Give the corresponding definitions of the procedures cons, car, and cdr.

Panico! 👽  Mica sicuro di aver capito cosa si vuole che faccia 😯

La prima parte è semplice:

s152

Meno facile dal numero ottenuto ricavare i componenti a e b. Serve l’equivalente del comando di sistema factor:

s153

Devo determinare quante volte il numero è divisibile per 2 e 3, ahemmm, l’ha fatto uno dei miei nerds

(define (num-divs n d)
  (define (iter x result)
    (if (= 0 (remainder x d))
        (iter (/ x d) (+ 1 result))
        result))
  (iter n 0))

Applicando num-divs per 2 e 3 si ottiene la coppia –pair– di (a . b):

(define (pair num)
  (cons (num-divs num 2)
        (num-divs num 3)))

ho raccolto le due procedure nel file get-pair.rkt, ottengo:

s154

😄 Per avere a e b basta usare car e cdr della pair ottenuta, banale, non la riporto.

Da Bill the Lizard ho preso num-divs, più pulita della mia.
sicp-ex costruisce la funzione exp invece di usare expt built-in; poi diventa quasi normale.
La soluzione migliore è quella di Spaceman Aki, usa anche lui la funzione built-in remainder (ah! saperlo ricordarlo 💥).
Una soluzione simile anche da Drewiki.

:mrgreen:

Annunci
Post a comment or leave a trackback: Trackback URL.

Trackbacks

Rispondi

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

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. 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 )

Google+ photo

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

Connessione a %s...

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