alla lista infinita formata dai quadrati di tutti i naturali.
possibile aiutino: definire, tramite Y, la funzione che, preso un naturale n restituisca
la lista infinita dei quadrati dei naturali da n in poi.
Mostrare qualche passo di riduzione dei termini cosi' definiti.
Esercizio 2
Si supponga di avere il tipo di dato astratto albero binario etichettato, in cui le etichette
siano funzioni da naturali a naturali.
(a)
Definire una funzione SCHEME "parapaponzi" che prenda in input due alberi binari e restituisca
l'albero binario la cui struttura sia l'intersezione delle due strutture, e in cui le etichette
dei nodi siano la composizione delle etichette dei nodi corrispondenti negli alberi in input.
Esempio:
f w j
/ \ / \ / \
h g z r -----> l u
\ / \ / / /
s t v i k q
dove j e' la composizione delle funzione f e w, l e' la composizione delle funzioni h e z,
u quella delle funzioni g ed r, q la composizione di t e k.
(b)
Definire una funzione SCHEME "ponzipo" che prenda in input una funzione f da naturali in naturali
e restituisca un albero binario completo (con funzioni da naturali a naturali come etichette)
tale che l'etichetta della radice sia
f, le etichette dei nodi a profondita' 1 siano funzioni uguali ad f tranne che su n valgono
f(n)-1, quelle al secondo livello, lo stesso, solo che su n valgono f(n)-2 e cosi' via.
Ovviamente se f(n)=0 allora ponzipo restituisce un albero formato da un solo nodo, con
etichetta f.
Esempio:
succ
/ \
(ponzipo succ 1) ----> succ' succ'
/ \ / \
succ" succ" succ" succ"
dove succ e' la funzione successore, succ' e' la funzione uguale a succ tranne che
succ'(1)=1, mentre succ" e' come succ tranne che succ"(1)=0.
Dimostrare che ponzipo e' totale.
Esercizio 3
(a)
Considerare il costrutto double-let con la seguente sintassi
(double-let ( ((var1 exp1)
:
(varn expn)) )
((var'1 exp'1)
:
(var'm exp'm)) ) )
expa; expb)
Il valore di un'espressione double-let valutata in un frame rho,
si ottiene nel seguente modo:
si estende rho con un frame rho' contenente le associazioni vari -> vi (i=1,..,n),
dove vi e' il valore di expi valutato in rho. Poi si estende sempre rho con un frame
rho" contenente le associazioni var'j -> v'j (j=1,..,m),
dove v'j e' il valore di exp'j valutato in rho'. Quindi si valuta expa in rho' e
expb in rho". Il valore finale dell'intera espressione double-let e' il valore
di expb.
Fornire la semantica dell'espressione double-let con una o piu' regole
della semantica operazionale strutturata.
(b)
Fare una bella domanda intelligente la cui risposta sia "chiusure".