ESERCIZI SCHEME OPERATIONAL SEMANTICS


Esercizio 1

Fornire un'espressione define scorretta secondo la semantica operazionale studiata nel corso, ma che risulterebbe corretta se si eliminasse nella regola (dec1) l'assunzione che x non debba appartenere ad Op.


Esercizio 1.5
Si dica qual e' il valore restituito dalla valutazione dell'espressione finale della seguente sessione Scheme, e si mostri la situazione dei frame.
(define f (lambda (x) x))
(define g (+ 1 2))
(let ((g f)
      (a g))
   (+ a (f g)))

Esercizio 2

Si dica qual e' il valore della seguente espressione Scheme, mostrando la situazione dei frames al termine della sua valutazione
                       (let ((b 4)
                              (a 3))
                           (lambda (x) (x + a)))


Esercizio 3

Fornire nel modo piu' breve e conciso possibile il significato di Scoping statico e Scoping dinamico

Esercizio 4

Introduciamo in Scheme una nuova parola chiave "buargh". 
La semantica di una buargh-espressione   (buargh exp1 exp2)  e' la seguente:
si valutano, nell'ordine, exp1 ed exp2 e si restitiusce una lista di quattro elementi
in cui il primo valore e' il valore di exp1, il secondo ed il terzo sono 0
ed il quarto e'  il valore di exp2.
Formalizzare tale sematica con una o piu' regole della SOS.


Esercizio 5

Modificare le regole (dec2), lambda) e (appl1) della nostra SOS in modo tale che SCHEME venga ad avere scoping dinamico (il corpo di una funzione e' cioe valutato nell'ambiente di chiamata e non in quello in cui la funzione viene definita).

  • Soluzione.

    Esercizio 6


    Nota: supporre che gli argomenti di una funzione vengano valutati da destra a sinistra.

  • Soluzione.

    Esercizio 7

    Fornire degli esempi che mostrino la differenza dei risultati che si possono avere se nella SOS si modifica la regola (if1) in modo tale che anziche' l'assuzione "v' diverso da #f" si abbia "v' = #t".
    Considerare poi il caso in cui in (if1) si sostituisca "e1 -> v'" con "e1 -> #t" ed in (if2) si sostituisca "e1 -> #f" con "e1 -> v' e v' diverso da #t"


    Esercizio 8


  • Soluzione.

    Esercizio 9


    Inoltre, dire quale sarebbe il valore dell'ultima espressione della seguente sessione SCHEME supponendo l'interprete modificato come descritto:
    (define x 2)
    (define (f x) (let ((g (lambda (y) (+ y x))) (g x)))
    (f 1)

  • Soluzione.

    Esercizio 10

    La regola (Var2) della nostra SOS e' quella che, insieme a (Var1) descrive cosa fa l'interprete per trovare il valore di un identiicatore. Consideriamo ora la seguente versione modificata della regola (Var2):

    (a) Quale sarebbe ora il valore dell'ultima espressione della seguente sessione SCHEME?
    (define a 3)
    (define (f y) (+ y a))
    (f 1)
    
    (b) Perche?
    (c) Descrivere brevemente quello che fa l'interprete durante la valutazione di (f 1), utilizzando la rappresentazione grafica dei frame.

  • Soluzione.

    Esercizio 11

    Dire sinteticamente, con precisione e proprieta' di linguaggio quello che fa l'interprete al momento di valutare un'applicazione in SCHEME e che e' formalmente descritto dalla regola (appl1) della SOS.

  • Soluzione.

    Esercizio 12

    Modificare la regola (var 2) della nostra Semantica Operazionale Strutturata nel seguente modo:
    aggiungere le ipotesi zeta (n')= (n'',rho') e n''not= bottom
    e sostituire n'' ad n' nella seconda riga delle ipotesi.

    Dire come si modifica il comportamento dell'interprete con tali modifiche. Dire qual'e' il valore dell'ultima espressione della seguente sessione SCHEME con la semantica modificata e quale con la semantica non modificata, descrivendo graficamente la situazione dei frame.

    (define (f y)
      (let ((h (lambda (y)
                 (let ((g (lambda (x)
                            (+ x y))))
                   (g 1)))))
        (h 4)))
    
    (f 7)
    

  • Soluzione.

    Esercizio 13

    Considerare la seguente sessione SCHEME:
    (define f 
      (lambda (y) 
                ((lambda (x) x) (g 1))))
    
    (define g ????)
    
    (f 4)
    
    Dire cosa si puo' inserire al posto di "????" affiche' alla fine della valutazione di (f 4) (e prima che i frame non piu' utili vengano eventualmente eliminati) la situazione dei frame sia la seguente:
       | f --> <.., ....>    |
       | g --> ......        |
       -----------------------
        ^         ^
     n3 |         | n1
     ------       |
    |x-->1|   -----------    n2   --------------------
     -----   | y --> 4   | <-----| x --> < n4, ...>  |  
       ^      -----------         --------------------
       | n4
    
    Ridisegnare anche la figura sopra riempiendo i puntini.

  • Soluzione.

    Esercizio 14


  • Soluzione.

    Esercizio 15

    Considerare la seguente sessione SCHEME:
    (define f 
      (lambda (y) 
                ((lambda (x) x) (g 1))))
    
    (define g ????)
    
    (f 4)
    
    Dire cosa si puo' inserire al posto di "????" affiche' i frame aperti durante la valutazione di (f 4) siano quelli descritti nel seguito.
       | f --> <.., ....>    |
       | g --> ......        |
       -----------------------
        ^         ^
     n3 |         | n1
     ------       |
    |x-->1|   -----------    n2   ----------
     ------  | y --> 4   | <-----| x --> 2 |  
       ^      -----------         ----------
       | n4
     ------     n5
    |x-->2| <-----
    -------
    
    Ridisegnare anche la figura sopra riempiendo i puntini.

  • Soluzione.

    Esercizio 16

    Vogliamo introdurre nello SCHEME un nuovo tipo di espressioni:
    (paperinik  e1 e2 e3)
    
    La semantica informale di una paperinik-espressione e' la seguente: Viene valutata l'espressione e1 e poi l'espressione e3. Se i loro valori sono numerici e la loro somma e' 3 allora il valore di tutta l'espressione e' il valore di e2. Altrimenti il valore dell'espressione e' 0. Inoltre, nel secondo caso, le eventuali modifiche all'ambiente totale apportate dalla valutazione di e1 ed e3 debbono scomparire.
    Scrivere una o piu' regola nello stile della Semantica Operazionale Strutturata che descrivano formalmente la semantica di una paperinik-espressione.


    Esercizio 17

    Disegnare l'ambiente rappresentato dalla seguente espressione:
    zeta1[Next(zeta1), < Next(EMPTY), empty[y,2][x,2]>]
    dove zeta1 e' EMPTY[Next(EMPTY),< bottom, empty[f,1][g,1]>].
    EMPTY denota l'ambiente totale vuoto, mentre empty il frame vuoto.


    Esercizio 18

    Fornire una espressione SCHEME alla fine della valutazione della quale l'ambiente sia il seguente:
           ------------------------------------          ------------
           |                                  |    n1    |          |     n2
           | f --> <(lambda (x) (+ 1 y)), n2> | <------- | y --> 1  | <------
           |                                  |          |          |
           ------------------------------------          -------------
    
    
  • Soluzione.


    Esercizio 19

    Supponiamo di aggiungere allo SCHEME un nuovo tipo di espressione :
              (ifeq  exp0 exp1 exp2 exp3)
    
    Il cui valore deve venir valutato dall'interprete nel modo seguente: si valuta l'espressione exp0, poi l'espressione exp1. Se i valori di exp0 ed exp1 coincidono, allora il valore dell'intera espressione e' il valore di exp2, altrimenti quello di exp 3.
    Fornire una o piu' regole nello stile della Semantica Operazionale Strutturata che descrivano formalmente il modo in cui l'interprete valuta un'espressione ifeq.


    Esercizio 20

    Vogliamo introdurre nello SCHEME un nuovo tipo di espressioni:
    (paperoga  e1 e2)
    
    La semantica di una paperoga-espressione e' equivalente a quella di (if e1 e2 5).
    Scrivere una o piu' regola nello stile della Semantica Operazionale Strutturata che descrivano formalmente la semantica di una paperoga-espressione.


    Esercizio 21

    Fornire l'espressione che denoti formalmente il seguente ambiente:
       ------------
       | a --> 3  |
       | b --> 4  |
       ------------
                  ^
                  |
                  |
              -----------         ----------
             | y --> 4   | <-----| x --> 2 |
              -----------         ----------
    
    N.B. Useremo "EMPTY" per denotare l'ambiente totale vuoto, ed "empty" per il frame vuoto.


    Esercizio 22

    Descrivere una (o piu') regole in Semantica Operazionale Strutturata che forniscano la semantica del costrutto "let" in modo diretto.
    Mostrare come ad un identificatore locale del costrutto "let" non sia possibile associare una funzione definita ricorsivamente.
  • Soluzione.

    Esercizio 22b

    Fornire una (o piu') regole in Semantica Operazionale Strutturata che forniscano la semantica del costrutto "letrec", che permette di associare ad un identificatore locale una funzione definita ricorsivamente.
    La semantica informale del costrutto letrec supponiamo essere la seguente: estendiamo il frame corrente n con un nuovo frame n', in cui gli identificatori locali sono inizialmente associati al valore indefinito '?'. Nel nuovo frame vengono poi valutate le espressioni associate agli identificatori, una di seguito all'altra, ed il loro valore sostituito ai vari '?' man mano. Alla fine si valuta il body.
    Con tale semantica, la valutazione della seguente sessione Scheme
    (define a 3)
    (letrec ((a a))
      a)
    
    restituisce <undefined> (che e' appunto quello che restituiscce il DrScheme).
    La valutazione di
       (define a 3)
       (letrec ((a 3)
                (b (+ a b)))
    	      a) 
    
    produce invece errore poiche' il valore da sommare ad a e' indefinito.
    Notare che ad un identificatore locale, per esempio var1, e' possibile benissimo associare il valore di una lambda espressione nel cui corpo sia presente l'identificatore var1 (o anche un'altra delle var_i). Essendo tale lambda espressione valutata a partire dal puntatore n', la chiusura corrispondente al valore v1, sara' <n', exp1>. Questo significa che, quando andremo a valutare una applicazione di tale chiusura ad un argomento, il corpo della funzione sara' valutato a partire dal frame puntato da n' (che contiene la funzione ricorsiva).
  • Possibile Soluzione (By P. Giarrusso). (file pdf)

    Esercizio 23

    Dire perche' l'interprete da come valore di
    (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
      (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
        (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
          (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
            (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
                 (fact 3))))))
    
    il numero 6, mentre da il seguente errore: "reference to undefined identifier: fact"
    se cerchiamo di valutare
    (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
      (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
        (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
          (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
            (let ((fact (lambda (x) (if (= 0 x) 1
                                (* x (fact (- x 1)))))))
                 (fact 5))))))
    



    Esercizio 24

    Scrivere una espressione SCHEME il cui valore sia una chiusura che contiene al suo interno un'altra chiusura.

  • Soluzione.

    Esercizio 25

    Considerare la seguente sessione SCHEME:
    (define f 
      (lambda (g) 
                ( (g (lambda (x) x) ) (+ 1 1))))
    
    (define g ????)
    
    (f (lambda (x) x))
    
    Dire cosa si puo' inserire al posto di "????" affiche' l'interprete non dia errore. Mostrare inoltre la situazione dei frame alla fine della valutazione di (f (lambda (x) x)) e prima che i frame eventualmente non piu' necessari vengano eliminati.

  • Soluzione.

    Esercizio 26

    Fornire l'espressione che denoti formalmente il seguente ambiente:
       ------------
       | a --> 3  |      ----------
       | b --> 4  | <----| a -->3 | 
       ------------      ----------
                  ^
                  |   
                  |
              -----------         ----------
             | y --> 4   | <-----| x --> 2 |
              -----------         ----------
    
    N.B. Useremo "EMPTY" per denotare l'ambiente totale vuoto, ed "empty" per il frame vuoto.
  • Soluzione.


    Esercizio 27

    Scrivere una espressione SCHEME il cui valore sia la chiusura < p1, (lambda (x) (x x)) >, dove p1 punta al frame empty[a,3] il cui padre (il frame immediatamente superiore) e' il frame al top-level.


  • Soluzione.

    Esercizio 28

    Considerare la seguente sessione SCHEME:
    (define f 
      (lambda (g) 
                (( k 3 ) (g 1))))
    
    (define k ????)
    
    (f (lambda (x) x))
    
    Dire cosa si puo' inserire al posto di "????" affiche' l'interprete non dia errore. Mostrare inoltre la situazione dei frame alla fine della valutazione di (f (lambda (x) x)) e prima che i frame eventualmente non piu' necessari vengano eliminati.

  • Soluzione.

    Esercizio 29

    Considerando la regola SOS (appl1), dire cosa succederebbe se la quarta assunzione fosse sostituita con la seguente
    Zeta'1 = Zetam+1[n', < n'', rho[x1, v1]...[xm, vm][y1, ?]...[yq, ?] > ]
    dove Zetam+1(n') = < n'', rho >.
    Dire , con la semantica operazionale cosi' modificata, qual'e' il valore dell'espressione (f 5) alla fine della seguente sessione SCHEME. Rappresentare graficamente l'ambiente totale immediatamente prima del completamento della valutazione di (f 5).
    (define x 2)
    
    (define a 3)
    
    (define (f x)
      (let ((x 4)
            (a 1))
          (+ a x)))
    
    (f 5) 
    

  • Soluzione.

    Esercizio 30

    A cosa serve la Semantica Operazionale Strutturata?


    Esercizio 31

    Fornire la semantica dell'espressione cond sia indirettamente in termini di espressioni if, sia direttamente, con regole della semantica operazionale strutturata.


    Esercizio 32 (non difficile, ma piuttosto complesso)

    Mostrare l'evoluzione dell'ambiente durante la valutazione della seguente sessione SCHEME.
    (define (K x) 
      (lambda (x) 
           (+ (let ((x 1)
                   (fun (lambda (y) (+ x 1))))
                 (fun x))
              (+ x x))))
    
    (define t 44)
    
    (define x 8)
    
    (let ((x (+ x 2))
          (gg (lambda (y) t))
          (t 66)
          (fun 21))
      ( (lambda (x) (+ (gg 1) fun))  ((K fun) x) ))
    

  • Soluzione.

    Esercizio 33

    Fornire una o piu' espressioni "define" ed una espressione exp tali che, una volta valutate le espressioni "define", durante la valutazione di exp si produca un ambiente della forma seguente
     |-------------|   n1    |-------------|   n2   |-------------|
     | ........    | <------ | ........    | <------| y -> <..,n1>|  
     | ........    |         | ........    |        | ........... |  
     |-------------|         |-------------|        |-------------| 
    
    Il frame piu' a sinistra e' il frame al top-level. I frames descritti possono contenere quello che si vuole, ma il frame piu' a destra deve contenere l'associazione di y con una chiusura il cui puntatore punta al frame al top-level.

  • Soluzione

    Esercizio 34

    Fornire la semantica dell'espressione cond con regole della semantica operazionale strutturata.
    Per semplicita' supporre che la valutazione di sottoespressioni di una espressione cond non modifichi l'ambiente.
  • Soluzione

    Esercizio 35

    Considerare il seguente costrutto lett con la seguente sintassi
    (lett ((b1 var1 exp1 exp'1)
          ..................
           (bn varn expn exp'n))
        exp)
    
    Il valore di un'espressione lett e' il valore di exp valutata nell'ambiente in cui viene valutata l'espressione lett esteso con un frame con le associazioni vari --> vi. Il valore vi e' calcolato valutando l'espressione booleana bi nell'ambiente in cui viene valutata l'espressione lett. Se il valore di bi e' falso si valuta (sempre nell'ambiente di lett) l'espressione expi, altrimenti exp'i.
    Fornire la semantica dell'espressione lett o direttamente con delle regole della semantica operazionale strutturata oppure indirettamente in termini di altri costrutti SCHEME (let escluso).

  • Soluzione

    Esercizio 36

    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.

  • Soluzione

    Esercizio 37

    Fare una bella domanda intelligente la cui risposta sia "chiusure".


    Esercizio 38
    Spiegare perche' perche' non e' possibile fornire (intendiamo "fornire in modo semplice", in modo complicato si potrebbe) una semantica operazionale dello SCHEME (non solo dello SCHEME completo, ma anche del solo frammento da noi considerato nel corso) solo in termini di lambda-calcolo e beta-riduzione, ma occorra invece andare ad utilizzare nozioni come frame, ambiente ecc..


    Esercizio 39

    Dimostrare formalmente, con una deduzione nel sistema della Semantica Operazionale Strutturata che la valutazione dell'espressione
     ( ((lambda (x) x) +) y 3 )
    
    nell'ambiente Z a partire dal puntatore p1, ha come valore 8 e non modifica l'ambiente.
    Si supponga che Z sia un ambiente contenente, tra gli altri, i frame descrivibili graficamente come segue:
                       ^
                       | p3
             ------------------
             |  y --> 5       | 
             | pippo --> true |
             ------------------
                 ^
                 | p2
                 |
             --------------
             |  x --> 64  | <---- p1
             |  z --> 3   |
             --------------
    

  • Soluzione

    Esercizio 40

    Supponiamo di introdurre un nuovo tipo di espressione in SCHEME, della forma
    (clarabella var1 var2 exp1 exp2 exp3)
    Se valutiamo una clarabella espressione partendo da un frame puntato da n, il suo valore e' quello dell'espressione exp3 valutata in n2, dove n2 e' come indicato nel diagramma seguente e dove i frame puntati da n1 e n2 vengono creati dalla valutazione della clarabella espressione. Inoltre v1 e' il valore di exp1 valutato in n, mentre v2 e' il valore di exp2 valutato in n1.
              |   n  ______________   n1 ______________   n2       
              | <--- | var1 -> v1 | <--- | var2 -> v2 | <---- 
    -----------      --------------      --------------
    
    Fornire una espressione SCHEME il cui effetto sia esattamente quello della valutazione di una clarabella espressione.

  • Soluzione

    Esercizio 41

    Mostrare graficamente come evolve l'abiente se facciamo valutare all'interprete SCHEME l'espressione
    ( (lambda (x) (x x)) (lambda (x) (x x)) )

  • Soluzione

    Esercizio 42
    Fornire una o piu' espressioni define e un'espressione exp tale che il valore di exp sia 1, ma tale che avrebbe come valore 2 se lo SCHEME avesse scoping dinamico.
  • Soluzione

    Esercizio 43

    Mostrare graficamente come evolve l'ambiente durante la valutazione della seguente espressione SCHEME

    ( (lambda (f) (f 3)) (lambda (x) x) )

  • Soluzione

    Esercizio 44

    Mostrare graficamente come evolve l'ambiente se facciamo valutare all'interprete SCHEME l'espressione (fun 1) dove fun e' definita precedentemente come
    (define fun 
      (lambda (x)
       (let ((a (- x 1)))
         (fun a))))
    

  • Soluzione

    Esercizio 45

    Mostrare graficamente come evolve l'ambiente se facciamo valutare all'interprete SCHEME l'espressione (fun 1) dove fun e' definita precedentemente come
    (define fun 
      (lambda (x)
       (let ((a (- x 1)))
         (fun x))))
    

  • Soluzione

    Esercizio 46

    Mostrare la situazione dei frame al termine della valutazione della seguente espressione.
    (define f   
         ( (lambda (y) (lambda (x) (+ 1 y)))  1)   )
    

  • Soluzione

    Esercizio 47

    Mostrare la situazione dei frame al termine della valutazione della seguente espressione.
    (define f  ( (lambda (z) (lambda (y) (+ 5 z)))  1)   )
    
    Discutere brevemente la soluzione data.


  • Soluzione

    Esercizio 48

    Scrivere una regola per la Semantica Operazionale Strutturata dello SCHEME per la valutazione di un nuovo tipo di espressione
    (spatti e )
    
    la cui semantica informale e' la seguente: si valuta l'espressione "e" e si restituisce sempre il valore numerico 3. Le eventuali modifiche all'ambiente causate dalla valutazione di e vanno pero' considerate.
    Discutere brevemente la soluzione data.

  • Soluzione

    Esercizio 49

    Scrivere una regola per la Semantica Operazionale Strutturata dello SCHEME per la valutazione di un nuovo tipo di espressione
    (cacettu e1 e2)
    
    la cui semantica informale e' la seguente: si valuta e1 poi, di seguito, e2. Il valore di una cacettu-espressione e' sempre il valore booleano true. Le eventuali modifiche all'ambiente causate dalla valutazione di e1 ed e2 vanno pero' considerate.

  • Soluzione

    Esercizio 50

    Mostrare la situazione dei frame al termine della valutazione della seguente espressione Scheme.
    	(let ((a (lambda (x) x)))
    	    (let ((b a))
        	       ((b a) 1) ) )
              

  • Soluzione

    Esercizio 51

    Per definire correttamente la Semantica Operazionale Strutturata dello Scheme il testo (Structured Operational Semantics of a fragment of the language Scheme) introduce una funzione Next(-). Quali sono il dominio e codominio di Next? Cosa restituisce? Discutere un punto della Semantica Operazionale Strutturata in cui viene utilizzata.


    Esercizio 52

    Vogliamo introdurre nello SCHEME un nuovo tipo di espressioni:
     (paperinika  e1 e2 e3) 
    La semantica informale di una paperinika-espressione e' la seguente: Viene valutata l'espressione e1 e poi l'espressione e2. Se i loro valori sono numerici e il valore di e1 e' minore di quello di e2 allora il valore di tutta l'espressione e' il valore di e2. Altrimenti il valore dell'espressione e' il valore di e3.
    Scrivere una o piu' regola nello stile della Semantica Operazionale Strutturata che descrivano formalmente la semantica di una paperinika-espressione.

    Esercizio 53

    Mostrare l'ambiente al termine della valutazione della espressione Scheme
    ( (lambda (y) (+ y 3)) (+ x y) ) 
     
    supponendo di valutarla nel seguente ambiente avendo p1 come puntatore di frame corrente.
                ^ pTop
                | 
       ------------------
       |  y --> 5       | 
       | pippo --> true |
       ------------------
                ^
                | p2
          --------------
          |  x --> 64  | <---- p1
          |  y --> 3   |
          --------------
        



    Esercizio 54

    Mostrare come evolve l'ambiente (si supponga di partire con l'ambiente che contiene solo il frame a top level vuoto) durante la valutazione della seguente espressione Scheme
    (let ((f (lambda (x) (+ x 1))))
       ((lambda (y) y) (f 2)))
      



  • Soluzione

    Esercizio 55

    Vogliamo introdurre nello SCHEME un nuovo tipo di espressioni: (paperoga e1 e2) La semantica di una paperoga-espressione e' equivalente a quella di (if e1 e2 5). Scrivere una o piu' regola nello stile della Semantica Operazionale Strutturata che descrivano formalmente la semantica di una paperoga-espressione.


    Esercizio 56

    Mostrare l'ambiente al termine della valutazione della espressione Scheme
    	    ( ((lambda (x) x) +) (pippo y) (let ((y y)) 3) )
    	    
    supponendo di valutarla nel seguente ambiente avendo p1 come puntatore di frame corrente. Dire anche qual e' il valore restituito dall'interprete.
                       ^
                       | pTop
             -----------------------------------------
             |  y --> 5                              |
             | pippo --> < (lambda (x) (+ y x)), p1> |
             -----------------------------------------
                          ^
                          | p2
                          |
               --------------
               |  y --> 64  | <---- p1
               |  z --> 3   |
               --------------
            

    Esercizio 57

    Dire qual e' il valore di (f 1) nella seguente sessione scheme e giustificarlo mostrando l'evoluzione dei frame durante la valutazione di (f 1).
    (define a 3)
    (define (f y)
        (let ( (a (+ a 1) )
               (b (+ a 1) ) )
           (+ y (+ a b))))
    (f 1)
    	

    Esercizio 58

    Considerare la seguente sessione SCHEME:
    (define f 
        (lambda (g) 
           ( (g (lambda (x) x) ) (+ 1 1))))
    
    (define g 1)
    
    (f (lambda (x) x))
       
    Mostrare la situazione dei frame alla fine della valutazione di (f (lambda (x) x)) e prima che i frame non piu' necessari vengano eventualmente eliminati.
    Qual e' il valore di (f (lambda (x) x)) ?

  • Soluzione

    Esercizio 59

    Considerare la seguente sessione SCHEME:
    (define h 
       (lambda (g) 
          ( (g (lambda (y) y) ) (+ 1 2))))
    
    (define g 5)
    
    (h (lambda (x) x))
    	     
    Mostrare la situazione dei frame alla fine della valutazione di (h (lambda (x) x)) e prima che i frame non piu' necessari vengano eventualmente eliminati.
    Qual e' il valore di (h (lambda (x) x)) ?

  • Soluzione

    Esercizio 60

    (define (G z)
      (let ((f (lambda (x)  (let (( y 1)) (+ y x)))))
        (f z)))

    (G 4)


    Esercizio 61


                             Z,n |-- e1 --> <(lambda (x) e), n'>,Z'   
       Z'[Next(Z'),(n',0[pippo,<(lambda (x) e), n'>])],  Next(Z')|-- e2 --> v,Z"
    -----------------------------------------------------------------------------------------
                                  Z,n |-- (oink e1 e2) --> v, Z"

                 Descrivere a parole cosa fa l'interprete per valutare una oink-espressione

    Esercizio 62

    (define x 1)

    (define (F x y)
      (let ((x 3)
              (y x))
        (let ((x 4)
                (f (lambda (z) (+ z x)))
                (y y))
          (+ x ( f y)))))

    (F x 3)
  • Soluzione

    Esercizio 63

    (define x 1)

    (define y x)

    (define (F z t)
      (let ((x 3)
              (y (+ z 3))
              (f (lambda (z) (+ z x))))
          (+ x ( f y))))

    (F y y)

    Descrivere graficamente i frame al termine della valutazione di (F y y)


    Esercizio 64

    Considerare la seguente sessione SCHEME:
    	(define (f y) (+ y 1))
    		
            (f ??)
    
    Dire cosa si puo' inserire al posto di "??" affinche' alla fine della valutazione di (f ??) (e prima che i frame non piu' utili vengano eventualmente eliminati) la situazione dei frame sia la seguente ed il valore di (f ??) risulti 4:
           | f --> <..., ........>               |
           ---------------------------------------
                ^                    ^     ^   ^
             n1 |                    |     |   |___________
     ------------------------------- |     |               |                
     | g --> < n1, (lambda (x)...)>| |   -----------       | 
     ------------------------------- |   | y --> 2 |       |  
                            -----------  -----------       |
        	               | x --> 3 |             -----------
          	               -----------             | y --> 3 | 
           	                                       -----------
          
    Ridisegnare anche la figura sopra riempiendo i puntini.

  • Soluzione

    Esercizio 65

    Supponiate che venga aggiunta allo Scheme la parola chiave "Boink" e che la nostra S.O.S. per lo Scheme contenga la seguente regola di inferenza:
                             Z,n |-- e1 --> <(lambda (x) e), n'>,Z'   
       Z'[Next(Z'),(n,0[pippo,<(lambda (x) e), n>])],  Next(Z')|-- e2 --> v,Z"
    -----------------------------------------------------------------------------------------------------------
                                  Z,n |-- (Boink e1 e2) --> v, Z"
    Descrivere a parole cosa fa l'interprete per valutare una Boink-espressione
    Descrivere lo stato dei frame alla fine dalla valutazione della seguente sessione Scheme e dire qual e' il valore restituito.
          	(define x 34)
    	(Boink ( (lambda (x) x) (lambda (y) y))  (pippo x) )
    
  • Soluzione

    Esercizio 66

    Si consideri la seguente funzione F sui numeri interi
    F 0 = 0
    F x = if x > 0 then 1 + F (1-x) else 1 + F (-1-x)

    Che cosa calcola F? Dimostrarlo formalmente.

  • Soluzione