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

mib2

Oggi qui, continuando da qui.

Exercise 2.6: In case representing pairs as procedures wasn’t mind-boggling enough, consider that, in a language that can manipulate procedures, we can get by without numbers (at least insofar as nonnegative integers are concerned) by implementing 0 and the operation of adding 1 as

(define zero (lambda (f) (lambda (x) x)))

(define (add-1 n)
  (lambda (f) (lambda (x) (f ((n f) x)))))

This representation is known as Church numerals, after its inventor, Alonzo Church, the logician who invented the λ-calculus.

Define one and two directly (not in terms of zero and add-1). (Hint: Use substitution to evaluate (add-1 zero)). Give a direct definition of the addition procedure + (not in terms of repeated application of add-1).

Devo confessare che non ci sono riuscito 👿
Ho provato per un po’ ma non sono andato oltre a questo:

s155

che è solo la verifica che zero e add-1 sono procedure correttamente definite. In questi casi attivo il liz-segnale e arriva Bill the Lizard 😄 che risolve spiegando tutto.

È tutto di là, riporto solo il risultato, semplicissimo (una volta fatto 😜), questo

(define one
  (lambda (f) (lambda (x) (f x))))

s156

A questo punto diventa semplice definire two, basta chiamare una volta in più la f dentro lambda:

(define two
  (lambda (f) (lambda (x) (f (f x)))))

s157

Di lì Bill generalizza per i numeri successivi, Bill davvero über-rockz 😄.

Una cosa simile anche da sicp-ex e Spaceman Aki ma manca la spiegazione.

SICP a volte è troppo impegnativo per me. O dovrei essere più motivato, sapere di dover passare l’esame, senza l’aiuto di Bill &co.

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