LINGUAGGI DI PROGRAMMAZIONE:
PARADIGMI DI PROGRAMMAZIONE

Compito del 17/4/2000

1)  Descrivere le caratteristiche principali di ereditarietà e binding dinamico.
       Commentare il seguente esempio.

    class A {
    void p() {System.out.println("A");}
    void m() {p();}
    }

    class B extends A {
    void p() {System.out.println("B");}
    }

    class Ered {
    public static void main(String[] args) {

      A a = new A();
      B b = new B();
      a.m();
      b.m();
      a=b;
      a.m();
    }
    }
     
2)  Spiegare il significato della parola chiave static in Java.

3)  Implementare un ambiente in Scheme, definendo le funzioni

    (lega x v amb) che aggiunge all’ambiente amb il legame della variabile x al valore v

    (cerca x amb) che cerca il valore legato a x nell’ambiente amb (se non c’è restituisce errore)
     

4)  Spiegare il significato di chiusura in Scheme.

5)  Data la definizione del predicato member in Prolog

member(M, [M|_]).
member(M, [_|T]) :- member(M,T).
spiegare quale risposta si ottiene al seguente goal
?- member(a,L)
E se si chiede un’altra soluzione?
Quante soluzioni ci sono?

6)  Definire in Prolog il predicato reverse(X,Y) per invertire una lista.