Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

16

Click here to load reader

Transcript of Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

Page 1: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

Laboratorio di Linguaggi di Programmazione 2007/2008

Marco AntoniottiGiuseppe Vizzari

Page 2: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe 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

Page 3: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

A.A. 2007/2008 Linguaggi di Programmazione 3

LISP, ambiente di lavoro

• Lispworks, Personal Editionhttp://www.lispworks.com/(versione gratuita, con alcune limitazioni)

Page 4: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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)

Page 5: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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))

Page 6: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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

Page 7: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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?

Page 8: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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

Page 9: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

A.A. 2007/2008 Linguaggi di Programmazione 9

celsius->farenheit

• (defun celsius->farenheit (c)(+ 32 (* 1.8 c)))

• prompt> (celsius->farenheit 24)75.2

Page 10: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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

Page 11: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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

Page 12: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

A.A. 2007/2008 Linguaggi di Programmazione 12

Esercizio svolto

(defun convert3 (dc dd du)

(+ (* 100 dc) (10 * dd) du))

Page 13: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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.

Page 14: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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.

Page 15: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

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))

Page 16: Laboratorio di Linguaggi di Programmazione 2007/2008 Marco Antoniotti Giuseppe Vizzari.

A.A. 2007/2008 Linguaggi di Programmazione 16