A.A. 2001-02

Linguaggi di Programmazione I: Paradigmi

2^{o} “esonero”

data di assegnazione: 16 novembre 2001 data di consegna: 28 novembre 2001 - ore 14:00

LISP

Il LISP è un linguaggio di programmazione inventato da John McCarty nei primi anni ’60 e che si è affermato in seguito, e non solo a livello accademico, soprattutto per applicazioni di Intelligenza Artificiale. Per una introduzione succinta a questo linguaggio vedi: M.J. Gordon, Programming Language Theory and its Implementation, Prentice Hall, 1998, Capitolo 9 (disponibile presso la biblioteca).

1. Definire la sintassi astratta di un sottolinguaggio del LISP che includa almeno le operazioni primitive su liste (car, cdr, cons …), ed inoltre lambda let, quote ed eval. Il trattamento di altri costrutti del linguaggio è facoltativa^{1}.

2. Definire la semantica operazionale del sottolinguaggio considerato facendo attenzione che coincida con quella del LISP.

3. Scrivere un programma che includa almeno un aspetto significatico del vostro linguaggio e valutarlo per mezzo della semantica operazionale.

Procedure come parametri

Molti linguaggi, ad esempio Pascal e C, permettono di passare procedure come parametri.

1. Estendere il meccanismo di chiamata di procedura del linguaggio All in modo da consentire il passaggio di procedure come parametri.

2. Dare la semantica operazionale del linguaggio esteso, scrivendo le regole sia per lo scoping statico che per quello dimamico.

3. Scrivere un programma che dia risultati diversi nei due casi.

Buon lavoro!

1 Non è richiesto il trattamento della ricorsione, né dei side-effects (setq). Attenzione a non complicarvi la vita …