Laboratorio di Linguaggi di Programmazione 2007/2008
Marco AntoniottiGiuseppe Vizzari
A.A. 2007/2008 Linguaggi di Programmazione 2
Logistica corso
• Cinque ore settimanali– Una lezione da due ore, venerdì aula U1-9 ore 11:30-13:30
– Una esercitazione da tre ore, martedì LAB731 ore 14:30-17:30
• Sito di supporto al corso unico di Linguaggi di Programmazione 1 (Linguaggi e computabilità, Paradigmi di programmazione, Laboratorio di linguaggi di programmazione)– Verrà segnalato al più presto tramite avviso sul sito del DISCo
– Conterrà slides del corso, collegamenti a materiale rilevante/utile, forum di discussione
A.A. 2007/2008 Linguaggi di Programmazione 3
LISP, ambiente di lavoro
• Lispworks, Personal Editionhttp://www.lispworks.com/(versione gratuita, con alcune limitazioni)
A.A. 2007/2008 Linguaggi di Programmazione 4
Laboratorio di LISP
• Usiamo l’ambiente Lispworks
• Come si apre
• Come si interagisce con il sistema
• Definizioni ed esecuzioni
• Errori e debugger
• Editor (EMACS)
A.A. 2007/2008 Linguaggi di Programmazione 5
Esercizi iniziali
• Valutate le seguenti espressioni al prompt del Common Lisp
(sqrt 4)
(sqrt 42)
(sqrt -1)
(sqrt #C(0 1))
A.A. 2007/2008 Linguaggi di Programmazione 6
Esercizi iniziali
• Provate a vedere se il Common Lisp ha funzioni per trovare
– Il minimo tra due nuumeri
– Il coseno di un angolo
– Per calcolare il quadrato di un numero
– Per calcolare il cubo di un numero
A.A. 2007/2008 Linguaggi di Programmazione 7
Esercizi di Conversione
• Scrivete delle funzioni per fare conversioni da un unità di misura ad un altra
– Da Celsius a Farenheit, celsius->farenheit– Da Farenheit a Celsius, farenheit->celsius
– Da Euro a Dollaro, euro->dollar– Da Dollaro a Euro, dollar->euro
• Come trattiamo il cambio giornaliero?
A.A. 2007/2008 Linguaggi di Programmazione 8
celsius->farenheit
Celsius Farenheit
0 32
10 50
50 122
100 212
cf ⋅+= 8,132
8.1
32−=
fc
A.A. 2007/2008 Linguaggi di Programmazione 9
celsius->farenheit
• (defun celsius->farenheit (c)(+ 32 (* 1.8 c)))
• prompt> (celsius->farenheit 24)75.2
A.A. 2007/2008 Linguaggi di Programmazione 10
Altri esercizi
• Definire la funzione triangle che calcola l’area di un triangolo secondo la regola
€
base×altezza2
A.A. 2007/2008 Linguaggi di Programmazione 11
Altri esercizi
• Definire il programma convert3 che prende tre interi in ordine crescente di significato e che produce il numero corrispondente
• Esempio
(convert3 1 2 3) 321
(convert3 2 4 0) 42
A.A. 2007/2008 Linguaggi di Programmazione 12
Esercizio svolto
(defun convert3 (dc dd du)
(+ (* 100 dc) (10 * dd) du))
A.A. 2007/2008 Linguaggi di Programmazione 13
Esercizi vari
• Il supermercato sotto casa ha bisogno di un programma che computi il valore di un “mucchio” di monete. Definite la funzione sum-coins. La funzione consuma 8 argomenti, il numero di centesimi, il numero di monete da 2 centesimi, il numero di monete da 5 centesimi, il numero di monete da 10, 20, 50 centesimi, il numero di monete da 1 e da 2 euro.
A.A. 2007/2008 Linguaggi di Programmazione 14
Esercizi vari
• Un vecchio cinema ha una funzione molto semplice per calcolare i suoi profitti. Ogni cliente paga 7 Euro a biglietto. Ogni proiezione costa 40 Euro più 0.5 Euro per spettatore. Definite la funzione total-profit. Questa funzione usa il numero di spettatori per proiezione e produce il profitto totale della proiezione.
A.A. 2007/2008 Linguaggi di Programmazione 15
Errori
• Come abbiamo visto il sistema Common Lisp genera diversi errori
• Provate ad inserire nel sistema le seguenti espressioni e leggete attentamente qual è il messaggio di errore– (/ 1 0)– (+ (10) 10)– (sin 20 10)– (someof 1 2 (+ 40 2))– (+ 1 2))
A.A. 2007/2008 Linguaggi di Programmazione 16
Top Related