Possibili domande orale
- 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?