- Come funziona il passaggio di parametri per nome? E per nome e per valore? Quali sono i rispettivi vantaggi e svantaggi? Fare esempi concreti che li mostrino. 

- Cosa si intende con espressione? E con comando? Qual e' il modello di calcolo sottostante a queste nozioni? 

- Cosa sono gli L- e R-valori?

- Cosa sono i nomi e le dichiarazioni? Cos'e' la memoria? E l'ambiente? A cosa servono?

- Cos'e' un valore denotabile? Uno esprimibile? E uno memorizzabile? 

- Spiegare (anche in italiano, se si vuole) la regola di tipaggio usata da OCaml per [...] (vedere in costrutti introdotti in classe)

- Come funziona il polimorfismo universale (ovvero quello visto in OCaml)?

- Cosa si intende con ordine superiore? 

- Spiegare le funzioni di ordine superiore map, filter, fold.

- Che differenza c'e' tra ricorsione di testa e di coda? Collegare la risposta con le funzioni fold (left e right)

- Che cos'e' una chiusura? A cosa serve? 

- Che differenza c'e' tra scope statico (lessicale) e dinamico?

- Spiegare il principio di α-equivalenza (anche nei linguaggi visti in classe, come SimPL e Λ, va bene). Come si comporta lo scope dinamico rispetto a questo principio? 

- In che senso una semantica operazionale big-step fornisce una specifica dell'interprete? Perche' non un'implementazione? 

- Che differenza c'e' tra il modello di computazione per ambiente e quello per sostituzione? 

- Cosa si intende con ambiente? E' sufficiente per modellare aspetti imperativi? 

- Cosa si intende con stato di una macchina astratta? 

- Spiegare la regola di β-riduzione. Possiamo utilizzarla come modello di esecuzione di programmi, totalmente o parzialmente? 

- Spiegare i concetti di programmazione dichiarativa e imperativa in termini di macchina astratta.

- Quali sono i punti chiave del paradigma orientato agli oggetti? 

- Cosa si intende con relazione compatibile? 

-Cos'e' la relazione di sotto-tipaggio? 

Last modified: Thursday, 7 December 2023, 4:13 PM