Linguaggi di Programmazione LISP

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download "Linguaggi di Programmazione LISP"

Transcript

1 Linguaggi di Programmazione LISP Carlo Lepori Scuola di Ingegneria del Canton Ticino (STS)

2 Introduzione In questa parte del corso Linguaggi di programmazione affronteremo alcune tematiche riguardanti la struttura e l interpretazione dei programmi per calcolatore, rifacendoci al testo: H. Abelson e G. Sussman, Structure and Interpretation of Computer Programs, Mit Press. Altri temi, come l introduzione a linguaggi specifici (C++, C, ADA, ecc) e un introduzione alla teoria dei linguaggi formali (compilazione) sono sviluppati in altre parti del corso. Come nel testo citato, useremo il linguaggio Lisp, e questo per vari motivi: L uso di un linguaggio non ancora conosciuto e di tipo diverso da quelli noti, permette di cogliere gli aspetti più importanti, in maniera meno condizionata. Il Lisp per la sua struttura semplice e per la sua versatilità è particolarmente adatto a questo tipo di approccio. La conoscenza del Lisp sarà vantaggiosa per la lezione Intelligenza artificiale. Prima di iniziare sembra opportuno riassumere le nostre conoscenze sui diversi linguaggi di programmazione: sono state proposte molte classificazioni dei linguaggi: imperativi: orientati alla descrizione di algoritmi; strettamente legati al modello di macchina detto di von Neumann (questo gruppo comprende quasi tutti i linguaggi noti); dichiarativi: approccio matematico, legato al concetto di funzione, come il Lisp, oppure in termini di relazioni logiche (calcolo dei predicati), come il Prolog. Si vedano anche la Tabella I.1 Evoluzione storica e la Tabella I.2 Cinque generazioni. 1

3 2 definizione linguaggio uso < 54 Assembler generale FORTRAN calcolo numerico ALGOL 60 calcolo numerico COBOL business DP APL array processing LISP manipolazione simbolica BASIC generale/educativo PL/I generale ALGOL 68 generale 71 Pascal generale/educativo 72 PROLOG programmazione logica 74 C programmazione di sistema 75 Concurr. Pascal programmazione concorrente 77 Modula programmazione concorrente 80 Modula-2 generale, grandi sistemi 83 Ada generale, grandi sistemi, real-time 84 Common Lisp generale, manipolazione simbolica C++ C a oggetti (rel. 1 e 2) 89 CLOS Lisp a oggetti 95 Ada95 Ada a oggetti Table I.1: Evoluzione storica Table I.2: 5 generazioni di linguaggi prima: linguaggio macchina, assembler; seconda: linguaggi procedurali non strutturati: Fortran, Cobol; terza: linguaggi procedurali strutturati: Pascal, C, Modula-2, Ada; quarta: linguaggi applicativi, query languages; quinta: linguaggi logici, linguaggi funzionali: Prolog, Lisp.

4 Chapter 1 La funzione come astrazione Per questo corso disponiamo di ambienti Lisp su PC (Allegro Common Lisp) e su Macintosh (Macintosh Common Lisp) al momento non sono disponibili versioni su AXP. Poiché lo scopo di questo corso non è di imparare il Lisp nella sua completezza, gli elementi del linguaggio verranno introdotti man mano, lasciando a chi si interessa di consultare testi e manuali per acquistare una maggiore esperienza. 1.1 Il linguaggio Lisp L interprete Il Lisp si presenta come interprete, ma è anche possibile compilare i programmi, disponendo quindi contemporaneamente dell ambiente confortevole di un inteprete e della velocità di un compilatore. Per accedere all interprete si lancia l applicazione. L interprete Lispsi annuncia con un messaggio e un prompt (il testo del prompt naturalmente non ha nessuna importanza): Lisp> L idea di fondo è che il Lisp è in attesa di una espressione da valutare. Egli cioè legge un espressione, la valuta e ne scrive il valore: si dice che l interprete si trova in una read-eval-print loop. L elemento base della sintassi del Lisp, l espressione, può essere un atomo, e si distinguono tra l altro numeri e simboli, oppure una lista (elenco di espressioni, senza virgola, racchiuse da parentesi rotonde). Si noti la 3

5 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 4 ricorsività della definizione: un elemento di una lista può essere a sua volta una lista, ecc. Il valore di un atomo numerico è il numero stesso: Lisp> Un simbolo può avere un valore a esso legato (bound), oppure no: Lisp> pi Lisp> a error: unbound value... Break 1> A causa dell errore precedente (la valutazione di un simbolo cui non è legato alcun valore), l interprete si trova ora nello stato di debugging che permette una correzione interattiva del programma. L interpete, a seconda dell implementazione, può essere settato in modo da reagire in altro modo. Quando deve valutare un espressione non atomica (detta anche una forma, in questo contesto), il Lisp considera il primo elemento della lista come una funzione e gli altri elementi come argomenti della funzione: Lisp> ( ) 666 Lisp> (* 5 99) 495 Come si vede, il Lisp usa una notazione algebrica di tipo a prefisso e non quella tradizionale di tipo a infisso: questa scomodità è compensata da una notevole uniformità sintattica. Le funzioni matematiche usate in questi esempi, permettono anche un numero indeterminato di argomenti: grazie alla notazione a prefisso non ci sono ambiguità: Lisp> (* ) 1200 Un altro vantaggio è la possibilità di avere argomenti che sono essi stessi espressioni:

6 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 5 Lisp> (+ (* 3 5) (- 10 6)) 19 Le funzioni primitive, cioè predefinite nel sistema Lisp non comprendono solo le funzioni aritmetiche fondamentali, ma anche molte altre che verranno introdotte secondo il bisogno. Per es.: Lisp> (sqrt 9.0) 3.0 Lisp> (sin (/ pi 6)) La definizione di funzioni (e simboli) In Lisp la possibiltà di definire nuove funzioni è fondamentale! Si usa la forma defun che prende come argomenti il nome della nuova funzione, la lista dei suoi argomenti e il corpo (body) che la definisce, formato da una o più espressioni: il valore della funzione sarà determinato dall ultima espressione. La forma defun non segue la sintassi ordinaria: i suoi argomenti non vengono valutati, ma usati per modificare l ambiente Lisp; forme di questo tipo verranno chiamate improprie. 1 Lisp> (defun square (x) (* x x)) square Il Lisp restituisce sempre un valore! 2 in questo caso il nome della funzione definita. Ora questa funzione fa parte dell interprete Lisp per tutto il collegamento: Lisp> (square (+ 2 5)) 49 È anche possibile definire un simbolo (o meglio: dargli un valore): Lisp> (defvar dieci 10) dieci 1 Il Common Lisp distingue forme speciali (special forms) predefinite, e macro, forme improprie che possono essere definite dall utente. 2 In realtà la risposta è di solito scritta maiuscola: il Common Lisp non distingue maiuscolo e minuscolo e archivia i simboli in maiuscolo. Noi useremo la scrittura minuscola per leggibilità.

7 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 6 Lisp> dieci 10 Si tratta evidentemente di una forma impropria 3 : il simbolo non viene valutato, anzi l importante è proprio l effetto collaterale (side-effect) di legare un valore al simbolo! A questo scopo si usa anche la forma impropria setq, il cui scopo è però di modificare il valore di un simbolo! Se si vuole mantenere il carattere strettamente funzionale del linguaggio, questo non è permesso. Lisp> (setq dieci 22) 22 Lisp> dieci L editor Di solito le nuove funzioni non sono definite direttamente nell interprete, ma sono preparate in un editor e poi caricate nell ambiente Lisp. Qualsiasi editor va bene, ma dato il numero assai grande di parentesi che si possono trovare in una definizione e la necessità di alternare il lavoro nell editor e nel Lisp, è conveniente usare un editor incorporato. Esso può venire invocato con la funzione 4 (ed "nome-del-file") Normalmente si accede all editor con un comando di menù. L editor segnala la chiusura delle parentesi e permette di realizzare l indentazione, usando p. es. tab dopo return, per aumentare la leggibilità del programma (pretty-printing). Per caricare la funzione nel Lisp, prima bisogna selezionare tutta la definizione e poi bisogna valutarla, con i comandi appositi. Per salvare il lavoro fatto nell editor, si salverà su disco il buffer (finestra) corrispondente. 3 Altre forme con lo stesso effetto, ma piccole differenze stilistiche sono: defparameter e defconstant. 4 Una stringa (espressa in Common Lisp con le virgolette) è un atomo che ha sé stesso come valore.

8 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE Espressioni condizionali e predicati Usando solo le funzioni viste, la nostra capacità espressiva è assai piccola. Per sempio ci è impossibile definire la funzione my-abs 5 che calcoli il valore assoluto di un numero. Per distinguere i vari casi possibili si usa la forma impropria cond: come sempre in Lisp, anche cond restituisce un valore! Il suo uso lo si capisce più facilmente con un esempio: (defun my-abs (x) (cond ((> x 0) x) ((= x 0) 0) ((< x 0) (- x)))) Gli argomenti di cond sono liste (dette clausole (clauses)) il cui primo elemento è detto antecedente e il resto conseguenza. L antecedente è un predicato: e cioè un espressione il cui valore può essere vero o falso. In Lisp, falso è il valore del simbolo nil, ogni altro valore viene considerato come vero ; talvolta si usa il simbolo t. 6 La valutazione di un espressione condizionale segue la seguente regola: viene valutato il primo predicato; se esso è falso, viene valutato il secondo predicato ecc., finché si trova un predicato che è vero, cioè che dà un valore non-nil: in questo caso si valutano le forme che compongono la conseguenza: il valore dell ultima è il valore di tutta l espressione condizionale. Se nessun predicato è vero, l espressione condizionale ha il valore nil. Anche se più predicati fossero veri, solo il primo di essi causa la valutazione della sua conseguenza: l ordine delle clausole è quindi importante! Un altro modo di definire il valore assoluto: (defun my-abs (x) (cond ((< x 0) (- x)) (t x))) Qui è stato usato il simbolo t che, essendo vero, fa scattare l esecuzione della forma corrispondente: è buona abitudine terminare la forma condizionale con una clausola che inizia con t. Ancora un altra possibilità: (defun my-abs (x) (if (< x 0) (- x) x)) 5 Volendo definire funzioni che sono già primitive Lisp, useremo nomi che iniziano con my- o nomi in italiano per evitare confusione. 6 Gli atomi nil e t hanno sé stessi come valore.

9 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 8 La forma impropria if valuta il primo argomento (il predicato): se è vero, restituisce come valore il valore del secondo argomento, in caso contrario quello del terzo (gli argomenti devono essere singole forme!) L applicazione di funzioni Esaminiamo più in dettaglio il meccanismo di valutazione usato normalmente dall interprete Lisp (escludendo quindi le forme improprie): 1. Tutte le sotto-espressioni della forma vengono valutate. 2. La funzione (il valore funzionale della prima sotto-espressione) viene applicata agli argomenti (i valori delle altre sotto-espressioni). Questa semplice regola presenta aspetti interessanti: il primo passo indica che per valutare una forma si devono valutare i suoi elementi. La regola di valutazione è quindi ricorsiva per natura: essa cioè contiene, come uno dei suoi passi, la necessità di applicare la regola stessa! Nel caso di funzioni che non sono primitive, viene valutato il loro corpo, sostituendo ogni parametro formale con il corrispondente valore dell argomento. Si considerino le seguenti definizioni: (defun sum-of-squares (x y) (+ (square x) (square y))) Lisp> (sum-of-squares 3 4) 25 (defun f (a) (sum-of-squares (+ a 1) (* a 2))) Lisp> (f 5) 136 Seguiamo in dettaglio il processo di valutazione per quest ultimo esempio; per valutare (f 5) si deve prima di tutto ricuperare il corpo di f: (sum-of-squares (+ a 1) (* a 2))

10 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 9 poi si sostituisce il parametro formale a con il valore dell argomento (che in questo caso è 5, trattandosi di un numero): (sum-of-squares (+ 5 1) (* 5 2)) Il processo continua: i valori degli argomenti (+ 5 1) e (* 5 2), e cioè 6 e 10, vengono sostituiti nel corpo di sum-of-squares: (+ (square 6) (square 10)) Utilizzando la definizione di square, si ottiene: (+ (* 6 6) (* 10 10)) che si riduce a ( ) e quindi a 136 Il processo qui descritto è detto modello di sostituzione (substitution model); esso serve per dare un significato all idea di applicazione di una funzione. D altra parte si tratta di un modello che non rispecchia necessariamente il funzionamento reale dell interprete e in ogni caso non è sufficientemente potente per descrivere casi più complessi, in cui si accetti la mutabilità dei dati, come vedremo più avanti. Si parla talvolta di pure Lisp per indicare il sotto-insieme del linguaggio che aderisce a una visione strettamente funzionale. Si osservi che ci sono altre interpretazioni possibili: un alternativa potrebbe essere di espandere le definizioni di funzioni fino ad ottenere un espressione che contenga solo funzioni primitive e procedere solo allora alla valutazione. (f 5) diventerebbe successivamente (sum-of-squares (+ 5 1) (* 5 2)) (+ (square (+ 5 1)) (square (* 5 2)))

11 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 10 (+ (* (+ 5 1) (+ 5 1)) (* (* 5 2) (* 5 2))) riducendosi poi a (+ (* 6 6) (* 10 10)) ( ) 136 Questo ordine di valutazione è detto normale (normal-order evaluation), in contrasto con quello visto prima, detto applicativo (applicative-order evaluation). Si può dimostrare che i due ordini di valutazione sono equivalenti, se è valido il modello di sostituzione. 1.2 Funzioni e processi di calcolo Ricorsione e iterazione lineari Si consideri il comunissimo esempio della funzione fattoriale, definita come segue: n! = n (n 1) (n 2) Una definizione ricorsiva sarebbe: n! = n (n 1)! 1! = 1 Questa definizione può essere programmata in Lisp direttamente: (defun factorial (n) (if (= n 1) 1 (* n (factorial (- n 1))))) D altra parte, usando la prima definizione, si può procedere accumulando i valori delle successive moltiplicazioni e contando il numero di moltiplicazioni: prodotto contatore prodotto contatore contatore + 1

12 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 11 (defun factorial (n) (fact-iter 1 1 n)) (defun fact-iter (product counter max-count) (if (> counter max-count) product (fact-iter (* counter product) (+ counter 1) max-count))) Sebbene ambedue le definizioni abbiano forma ricorsiva (le funzioni sono definite invocando sé stesse), i processi di calcolo creati dalle due funzioni sono molto differenti: nel primo caso si ha un numero eventualmente elevato di moltiplicazioni in sospeso: l interprete ha bisogno di una quantità crescente di memoria (proporzionale a n) per mantenere l informazione necessaria: un processo di questo tipo si dice linearmente ricorsivo (si veda la Tabella 1.1). (factorial 6) (* 6 (factorial 5)) (* 6 (* 5 (factorial 4))) (* 6 (* 5 (* 4 (factorial 3)))) (* 6 (* 5 (* 4 (* 3 (factorial 2))))) (* 6 (* 5 (* 4 (* 3 (* 2 (factorial 1)))))) (* 6 (* 5 (* 4 (* 3 (* 2 1))))) (* 6 (* 5 (* 4 (* 3 2)))) (* 6 (* 5 (* 4 6))) (* 6 (* 5 24)) (* 6 120) 720 Table 1.1: Processo ricorsivo Nel secondo caso in ogni momento la situazione è definita dal valore delle tre variabili del programma: un processo di questo tipo è detto linearmente iterativo (si veda la Tabella 1.2). Non si confonda la forma della definizione della funzione, con il tipo di processo generato! Quando una funzione ricorsiva genera un processo iterativo, si parla di tail recursion. Nei linguaggi tradizionali un processo iterativo viene descritto con strutture sintattiche apposite (esistono anche in Lisp), per evitare lo spreco di memoria inerente a un uso inutile di processi ricorsivi. Un buon Lisp dovrebbe

13 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 12 (factorial 6) (fact-iter 1 1 6) (fact-iter 1 2 6) (fact-iter 2 3 6) (fact-iter 6 4 6) (fact-iter ) (fact-iter ) (fact-iter ) 720 Table 1.2: Processo iterativo essere in grado di riconoscere la tail recursion e quindi la presenza di strutture sintattiche iterative non è indispensabile. Strutture sintattiche magari comode, ma non essenziali, sono dette sintactic sugar La ricorsione ad albero In alcuni casi la ricorsione presente nella definizione di una funzione non è lineare ma ad albero (tree recursion). Un esempio molto semplice è il calcolo della successione detta di Fibonacci, in cui ogni numero è la somma dei due precedenti: 0, 1, 1, 2, 3, 5, 8, 13, 21,... In generale i numeri di Fibonacci possono essere definiti come segue: 0 se n = 0 F (n) = 1 se n = 1 F (n 1) + F (n 2) altrimenti La definizione può essere tradotta immediatamente in una funzione ricorsiva: (defun fib (n) (cond ((= n 0) 0) ((= n 1) 1) (t (+ (fib (- n 1)) (fib (- n 2)))))) Per calcolare (fib 5) si devono calcolare (fib 4) e (fib 3) e così di seguito, con un processo che si biforca ad ogni passo. È un esempio interessante, ma naturalmente esistono metodi più efficienti per calcolare i numeri di Fibonacci: qui si ripetono continuamente calcoli

14 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 13 già fatti, per cui il processo impiega un tempo che cresce esponenzialmente con n; lo spazio richiesto invece cresce linearmente. Questo comportamento è tipico dei processi con ricorsione ad albero. Un approccio iterativo a questo esempio, si basa sull idea che partendo con due numeri interi a e b inizializzati a 1 e 0 rispettivamente, con la trasformazione simultanea a a + b b a dopo n trasformazioni b sará uguale a F (n). (defun fib (n) (fib-iter 1 0 n)) (defun fib-iter (a b count) (if (= count 0) b (fib-iter (+ a b) a (- count 1)))) Questo metodo è una iterazione lineare. Benché la differenza del tempo impiegato dai due metodi sia notevolissima, non si deve concludere che le ricorsioni ad albero siano inutili. In altri campi l approccio ricorsivo rappresenta un mezzo naturale e potente (Si ricordi che il funzionamento dell interprete è stato descritto in questi termini!). 1.3 Funzioni di ordine superiore Gli esempi visti finora riguardavano funzioni che hanno come argomenti dei numeri. Definire una funzione rappresenta un astrazione dai casi particolari, rappresentati dai valori che gli argomenti possono prendere: così (defun cube (x) (* x x x)) definisce come calcolare il cubo di un numero, a prescindere dal suo valore contingente. Si potrebbero usare espressioni del tipo: (* 3 3 3) (* y y y)

15 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 14 ma naturalmente questo sarebbe assai scomodo, essendo obbligati a lavorare al livello delle funzioni predefinite e senza la possiblità di esprimere il concetto dell elevazione alla terza potenza. Per questo i linguaggi, tranne i più primitivi, offrono la possibiltà di definire nuove funzioni. Un passo in avanti nel livello di astrazione è rappresentato da funzioni che manipolano altre funzioni, come parametri o come risultati Funzioni come parametri Si considerino le seguenti funzioni: la prima calcola la somma degli interi da a a b: (defun sum-int (a b) (if (> a b) 0 (+ a (sum-int (+ a 1) b)))) La seconda calcola la somma dei cubi nell intervallo definito: (defun sum-cubes (a b) (if (> a b) 0 (+ (cube a) (sum-cubes (+ a 1) b)))) La terza calcola un approssimazione, non molto buona, di π/8: (defun pi-sum (a b) (if (> a b) 0 (+ (/ 1 (* a (+ a 2))) (pi-sum (+ a 4) b)))) Evidentemente questi tre esempi hanno una struttura simile; in matematica si usa la notazione seguente: b f(n) = f(a) + + f(b) n=a Vorremmo definire anche in Lisp una funzione del tipo: (defun sum (f a step b)...

16 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 15 dove f è la funzione da applicare a ogni termine e step è il passo per calcolare il prossimo termine. Questo è possibile in Common Lisp ma è necessario avvertire l interprete quando si intende usare un parametro come funzione tramite funcall: (defun sum (f a step b) (if (> a b) 0 (+ (funcall f a) (sum f (+ step a) step b)))) Quando si usa sum è necessario avvertire l interprete che alcuni parametri sono da usare come funzioni; in Common Lisp questo avviene ponendo # prima del nome della funzione 7. Così, utilizzando la funzione Common Lisp + (che, usata con un solo argomento, restituisce l argomento stesso) si può ottenere l effetto di sum-int: Lisp> (sum # ) 55 È anche possibile definre sum-int tramite sum: (defun sum-int (a b) (sum # + a 1 b)) Per calcolare sum-cubes usiamo la funzione cube, che abbiamo già definito: Lisp> (sum # cube ) 3025 Per il terzo esempio si dovrebbe definire la funzione pi-f: (defun pi-f (n) (/ 1 (* n (+ n 2)))) Lisp> (* 8 (sum # pi-f )) In generale è però scomodo dover definire col proprio nome funzioni che non hanno un utilità generale. Per definire pi-sum tramite sum sarebbe 7 In realtà si dovrebe usare la forma impropria function, ma per comodità di scrittura i caratteri # hanno un effetto equivalente: (function sin) e # sin sono la stessa cosa.

17 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 16 opportuno poter esprimere direttamente la funzione pi-f all interno di sum. Questo è possibile tramite la forma impropria lambda 8, che serve a definire funzioni anonime (usando la stessa sintassi di defun): (defun pi-sum (a b) (sum # (lambda (n) (/ 1 (* n (+ n 2)))) a 4 b)) Lisp> (* 8 (pi-sum )) La funzione definita tramite lambda è una funzione come le altre (ma non ha un nome), e può essere usato negli stessi contesti: Lisp> ((lambda (x) (* x x)) 5) Funzioni come valori In Lisp è possibile ottenere funzioni come valori di altre funzioni. Illustriamo questa possibilità con un esempio tratto dal calcolo infinitesimale: la derivata di x 3 è 3x 2. Questo può essere interpretato dicendo che derivata è un operatore che, applicato alla funzione x 3 dà come valore la funzione 3x 2. Definiamo la derivata tramite la formula (per il limite dx 0): f (x) = f(x + dx) f(x). dx Usando lambda possiamo esprimere questa formula con la funzione 9 : (lambda (x) (/ (- (funcall f (+ x dx)) (funcall f x)) dx)) Si può andare oltre e definire la funzione deriv che prende come argomenti una funzione f e un valore (piccolo) per dx e restituisce come valore la derivata della funzione. 8 Il nome ha origine dalle teorie logiche sulla computabilità delle funzioni. Non bisogna però lasciarsi spaventare: in Lisp serve solo allo scopo indicato! 9 Si tratta ancora di un calcolo numerico della derivata; vedremo in seguito che in Lisp è possibile anche darne una definizione simbolica.

18 CHAPTER 1. LA FUNZIONE COME ASTRAZIONE 17 (defun deriv (f dx) # (lambda (x) (/ (- (funcall f (+ x dx)) (funcall f x)) dx))) Possiamo ora usare la funzione così definita per calcolare la derivata della funzione cube nel punto 5 (il valore esatto è naturalmente 75): Lisp> (funcall (deriv # cube ) 5) Anche in questo caso, in Common Lisp è necessario usare funcall per indicare l applicazione di una funzione e # per evitare che venga usato il valore dell atomo cube. Il metodo di Newton per gli zeri di una funzione Per mostrare le possibilità offerte dal calcolo della funzione derivata, vogliamo implementare l algoritmo di Newton per gli zeri di una funzione differenziabile. Se x 0 è una approssimazione dello zero, è una approssimazione migliore. x 1 = x 0 f(x 0) f (x 0 ) L approssimazione successiva, a partire da un valore iniziale (qui chiamato guess), viene espressa in Lisp come segue: (defun newton (f guess) (if (< (abs (funcall f guess)) ) guess (newton f (improve-guess f guess)))) Il miglioramento dell approssimazione avviene con la funzione deriv: (defun improve-guess (f guess) (- guess (/ (funcall f guess) (funcall (deriv f ) guess)))) Possiamo ora controllare il funzionamento di newton: Lisp> (newton # (lambda (x) (- (cos x) x)) 1) 0.739

19 Chapter 2 I dati come astrazione Finora abbiamo visto funzioni che hanno come valore numeri (o eventualmente altre funzioni), ma un linguaggio evoluto deve dare la possibilità di usare forme più complesse di valori, i cosiddetti dati strutturati. La definizione di questo tipo di dati può essere difficoltosa: ripieghiamo sull approccio seguente: Devono esistere funzioni dette costruttori (constructors) che permettono di costruire il dato strutturato a partire da dati più semplici. Devono esistere funzioni dette selettori (selectors) che, a partire dal dato strutturato, permettono di estrarre i dati più semplici che li compongono. Studieremo prima di tutto le strutture tipiche del Lisp, per poi affrontare il tema in generale. 2.1 La lista La struttura di dati fondamentale nel linguaggio Lisp è la lista 1 : essa è pure la forma sintattica fondamentale, realizzando la completa identità tra dati e programmi, tipica del Lisp. Abbiamo già definito la lista a pag. 3, dicendo che è un elenco di espressioni (simboliche) racchiuso da parentesi rotonde; un espressione a sua volta può essere un atomo o una lista. 1 Lisp significa appunto LISt Processing (e non Lots of Insane and Stupid Parentheses, come affermano i detrattori) 18

20 CHAPTER 2. I DATI COME ASTRAZIONE 19 Il costruttore: cons Data la definizione ricorsiva di lista, il costruttore avrà un approccio ricorsivo alla costruzione: esso aggiunge un elemento in testa alla lista data. Supponiamo che il valore di lis sia (5 7 9): Lisp> lis (5 7 9) Lisp> (cons 3 lis) ( ) Lisp> lis (5 7 9) Il costruttore non modifica l argomento! In un certo senso il valore fornito è una nuova lista. Per poter porre il primo elemento, bisogna aggiungerlo alla lista vuota; questa può essere rappresentata come () oppure come nil. nil è contemporaneamente un atomo (il simbolo il cui valore è nil) e una lista (la lista vuota ()): questa (unica!) coincidenza rispecchia il ruolo di nil come elemento neutro della costruzione di liste. Lisp> (cons 1 ()) (1) In questo modo si possono p.es. costruire liste di risultati: supponiamo di disporre del predicato primep che verifica se un numero è primo; per costruire la lista dei primi inferiori a n, definiamo la funzione seguente: (defun prim-list (n) (cond ((zerop n) ()) ((primep n) (cons n (prim-list (1- n)))) (t (prim-list (1- n))))) Si osservi che, per ora, cons può esser usato solo se il secondo argomento è una lista! I selettori: first e rest I selettori eseguono il compito inverso a quello di cons: data una lista, essi selezionano la prima espressione (first) e il resto della lista (rest) 2 : 2 Per motivi storici, i nomi più diffusi per queste primitive sono car e cdr; in altri contesti si usano anche i nomi testa (head) e coda (tail), che non sono però predefiniti in Common Lisp.

21 CHAPTER 2. I DATI COME ASTRAZIONE 20 l argomento deve essere una lista! Lisp> lis (5 7 9) Lisp> (first lis) 5 Lisp> (rest lis) (7 9) Lisp> lis (5 7 9) Anche i selettori non modificano l argomento! evidente che, per una lista qualsiasi, vale: Data la loro definizione è Lisp> lis (5 7 9) Lisp> (cons (first lis) (rest lis)) (5 7 9) Lisp> (first (cons 3 lis)) 3 Lisp> (rest (cons 3 lis)) (5 7 9) Le espressioni simboliche Una caratteristica del Lisp è la possibilità di lavorare a livello simbolico: finora gli atomi visti erano numeri e i simboli avevano come valore un numero. Questa restrizione non è necessaria! Per poter operare con i simboli, dobbiamo superare una difficoltà: nell esempio: Lisp> (cons 1 ()) (1) l interprete segue la regola di valutazione e valuta gli argomenti, trovando 1 e nil; passa poi alla costruzione della lista. Non è invece possibile costruire in questo modo la lista (a):

22 CHAPTER 2. I DATI COME ASTRAZIONE 21 Lisp> (cons a ()) Error... L interprete vuole il valore di a! Dobbiamo quindi poter disporre di una forma impropria che eviti la valutazione dell espressione. Lo stesso problema lo si ritrova nel linguaggio di tutti i giorni: alla domanda Dimmi come ti chiami ci aspettiamo un nome in risposta, ma all invito ripeti Come ti chiami? per favore vorremmo sentir ripetere la domanda citata tra virgolette! Anche in Lisp si dice che un espressione da non valutare viene citata (quoted) e si indica con un apice 3 davanti ad essa: Lisp> a a Lisp> (mele pere) (mele pere) Lisp> (defvar lista (mele pere noci)) lista Lisp> (first lista) mele Lisp> (rest (mele pere noci)) (pere noci) Per poter lavorare a livello simbolico sono indispensabili due predicati (che insieme a cons, car e cdr formano le 5 funzioni base del Lisp): atom è vero (t) se il suo unico argomento è un atomo (cioè non è una lista) 4 ; eq ha due argomenti (che dovrebbero essere atomi): esso è vero (t) se i due atomi sono identici 5. Sia per esempio da definire una funzione my-member che controlli se un simbolo sia presente in una lista: 3 Si tratta di una stenografia per la forma impropria quote: (quote expr) e expr sono la stessa cosa. Questi caratteri che influenzano il modo in cui l interprete legge le espressioni sono detti macro-characters (vedi anche la nota a pag. 15). 4 Attenzione: atom è uno dei pochi predicati che non terminano con la lettera p. È anche disponibile il predicato listp che dà la risposta contraria. 5 Va usato solo per atomi simbolici: negli altri casi si usi equal e per i numeri =; sono a disposizione anche predicati per casi particolari: null controlla se l argomento è nil o la lista vuota, zerop controlla se un numero è zero, ecc.

23 CHAPTER 2. I DATI COME ASTRAZIONE 22 (defun my-member (at lis) (cond ((null lis) nil) ((eq at (first lis)) t) (t (my-member at (rest lis))))) Questo esempio illustra il metodo per lavorare con una lista: prima si studia il first della lista e poi il rest con una chiamata ricorsiva. Qual è il valore della funzione boh? (defun boh (lista) (cond ((null lista) nil) (t (cons (first lista) (boh (rest lista))))) Due primitive molto utili, lavorando con liste, sono list e append. La prima prende un numero variabile di espressioni come argomenti e crea una lista che le contiene; la seconda prende un numero variabile di liste come argomenti e ne fa una lista sola: Lisp> (list miele zucchero saccarina) (miele zucchero saccarina) Lisp> (append (a b) (c d e) (f)) (a b c d e f) Se ci si limita a due argomenti, la loro definizione a partire dalle primitive fondamentali è evidente. Che cos è una lista? In realtà il costruttore cons accetta come argomenti due espressioni qualsiasi e dà come valore una coppia detta puntata (dotted pair), i cui elementi possono essere selezionati con car e cdr 6 : Lisp> (cons a b) (a. b) Lisp> (defvar pair (cons a b)) pair Lisp> (car pair) a 6 In questo contesto l uso dei nomi storici sembra più adatto.

24 CHAPTER 2. I DATI COME ASTRAZIONE 23 Lisp> (cdr pair) b Un metodo di visualizzare questo fatto è il seguente: gli atomi a e b vengono rappresentati da celle: cons crea una nuova cella che contiene i puntatori ai due atomi come si vede nella Fig Una lista di uno o più atomi, a b (a. b) Figure 2.1: Coppia puntata. formata con l applicazione successiva di cons, viene rappresentata come nella Fig L interprete usa la notazione con il punto solo quando non è in a nil a b c nil (a. nil) (a) (a. (b. (c. nil))) (a b c) Figure 2.2: Liste di atomi. grado di usare la notazione tipica con le liste. I selettori forniscono quindi uno dei puntatori, senza modificare la struttura esistente! Lo stesso atomo (o la stessa lista) può far parte di differenti strutture. La Fig. 2.3 mostra una lista nella quale la prima espressione è a sua volta una lista. Questa rappresentazione rende chiari alcuni meccanismi, altrimenti un po astrusi. Il predicato eq per esempio considera uguali due oggetti identici: se si tiene conto del fatto che cons costruisce in ogni caso una nuova cella, questi esempi risulteranno chiari:

25 CHAPTER 2. I DATI COME ASTRAZIONE 24 a b nil 3 c nil ((a. (b. nil)). (c. nil)) ((a b) c) Figure 2.3: Lista con sottolista. Lisp> lista (mele pere noci) Lisp> (eq lista lista) t Lisp> (eq lista lista) t Lisp> (eq lista (mele pere noci)) nil Lisp> (eq (car lista) mele) t Per i numeri il Common Lisp lascia libertà agli implementatori di usare puntatori o rappresentazioni esplicite e permette l uso di copie, per motivi di efficienza: questo rende l uso di eq con numeri dipendente dall implementazione (Si dovrà quindi partire dall idea che due numeri, anche con lo stesso valore, non saranno necessariamente eq). La funzione append usa il puntatore all ultima lista; per le altre liste crea copie delle strutture, che si riferiscono agli stessi atomi, per non modificare gli argomenti (vedi Fig. 2.4). Così lavora la maggior parte delle funzioni che operano su liste. Esistono anche funzioni che modificano gli argomenti: benché siano talvolta più efficienti, il loro uso non è compatibile con un approccio puramente funzionale.

26 CHAPTER 2. I DATI COME ASTRAZIONE 25 lista1 nil (a b) a b (append lista1 lista2) lista2 nil (c d) c d Figure 2.4: Effetto di append.

27 Contents 1 La funzione come astrazione Il linguaggio Lisp L interprete La definizione di funzioni (e simboli) L editor Espressioni condizionali e predicati L applicazione di funzioni Funzioni e processi di calcolo Ricorsione e iterazione lineari La ricorsione ad albero Funzioni di ordine superiore Funzioni come parametri Funzioni come valori I dati come astrazione La lista

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO

EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO EVOLUZIONE DEI LINGUAGGI DI ALTO LIVELLO Linguaggi di programmazione classificati in base alle loro caratteristiche fondamentali. Linguaggio macchina, binario e fortemente legato all architettura. Linguaggi

Dettagli

Ricapitoliamo. Ricapitoliamo

Ricapitoliamo. Ricapitoliamo Ricapitoliamo Finora ci siamo concentrati sui processi computazionali e sul ruolo che giocano le procedure nella progettazione dei programmi In particolare, abbiamo visto: Come usare dati primitivi (numeri)

Dettagli

Corso di Informatica

Corso di Informatica Corso di Informatica Modulo T2 3-Compilatori e interpreti 1 Prerequisiti Principi di programmazione Utilizzo di un compilatore 2 1 Introduzione Una volta progettato un algoritmo codificato in un linguaggio

Dettagli

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.

Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo. DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti

Dettagli

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente

Funzioni funzione dominio codominio legge argomento variabile indipendente variabile dipendente Funzioni In matematica, una funzione f da X in Y consiste in: 1. un insieme X detto dominio di f 2. un insieme Y detto codominio di f 3. una legge che ad ogni elemento x in X associa uno ed un solo elemento

Dettagli

Brevissima introduzione al Lisp

Brevissima introduzione al Lisp Brevissima introduzione al Lisp Versione preliminare Giorgio Ausiello, Luigi Laura May 16, 2001 Queste pagine costituiscono un riferimento per gli studenti del corso di Informatica Teorica e non hanno

Dettagli

Programmazione Funzionale

Programmazione Funzionale Programmazione Funzionale LP imperativi: apparenza simile modello di progettazione = macchina fisica Famiglia dei LP imperativi = progressivo miglioramento del FORTRAN Obiezione: pesante aderenza dei LP

Dettagli

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI

APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI APPUNTI DI MATEMATICA LE FRAZIONI ALGEBRICHE ALESSANDRO BOCCONI Indice 1 Le frazioni algebriche 1.1 Il minimo comune multiplo e il Massimo Comun Divisore fra polinomi........ 1. Le frazioni algebriche....................................

Dettagli

Dimensione di uno Spazio vettoriale

Dimensione di uno Spazio vettoriale Capitolo 4 Dimensione di uno Spazio vettoriale 4.1 Introduzione Dedichiamo questo capitolo ad un concetto fondamentale in algebra lineare: la dimensione di uno spazio vettoriale. Daremo una definizione

Dettagli

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0

4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0 Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice

Dettagli

Lezioni di Matematica 1 - I modulo

Lezioni di Matematica 1 - I modulo Lezioni di Matematica 1 - I modulo Luciano Battaia 16 ottobre 2008 Luciano Battaia - http://www.batmath.it Matematica 1 - I modulo. Lezione del 16/10/2008 1 / 13 L introduzione dei numeri reali si può

Dettagli

Capitolo 2. Operazione di limite

Capitolo 2. Operazione di limite Capitolo 2 Operazione di ite In questo capitolo vogliamo occuparci dell operazione di ite, strumento indispensabile per scoprire molte proprietà delle funzioni. D ora in avanti riguarderemo i domini A

Dettagli

risulta (x) = 1 se x < 0.

risulta (x) = 1 se x < 0. Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente

Dettagli

Funzioni in C. Violetta Lonati

Funzioni in C. Violetta Lonati Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni

Dettagli

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. Algoritmi 1 Sommario Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi. 2 Informatica Nome Informatica=informazione+automatica. Definizione Scienza che si occupa dell

Dettagli

Linguaggi e Paradigmi di Programmazione

Linguaggi e Paradigmi di Programmazione Linguaggi e Paradigmi di Programmazione Cos è un linguaggio Definizione 1 Un linguaggio è un insieme di parole e di metodi di combinazione delle parole usati e compresi da una comunità di persone. È una

Dettagli

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE

LE SUCCESSIONI 1. COS E UNA SUCCESSIONE LE SUCCESSIONI 1. COS E UNA SUCCESSIONE La sequenza costituisce un esempio di SUCCESSIONE. Ecco un altro esempio di successione: Una successione è dunque una sequenza infinita di numeri reali (ma potrebbe

Dettagli

Esempi di algoritmi. Lezione III

Esempi di algoritmi. Lezione III Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni

Dettagli

Matematica in laboratorio

Matematica in laboratorio Unità 1 Attività guidate Attività 1 Foglio elettronico Divisibilità tra numeri naturali Costruisci un foglio di lavoro per determinare se a è divisibile per b, essendo a e b due numeri naturali, con a

Dettagli

Elementi di semantica operazionale

Elementi di semantica operazionale Elementi di semantica operazionale 1 Contenuti sintassi astratta e domini sintattici un frammento di linguaggio imperativo semantica operazionale domini semantici: valori e stato relazioni di transizione

Dettagli

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA

COS È UN LINGUAGGIO? LINGUAGGI DI ALTO LIVELLO LA NOZIONE DI LINGUAGGIO LINGUAGGIO & PROGRAMMA LINGUAGGI DI ALTO LIVELLO Si basano su una macchina virtuale le cui mosse non sono quelle della macchina hardware COS È UN LINGUAGGIO? Un linguaggio è un insieme di parole e di metodi di combinazione delle

Dettagli

1 Serie di Taylor di una funzione

1 Serie di Taylor di una funzione Analisi Matematica 2 CORSO DI STUDI IN SMID CORSO DI ANALISI MATEMATICA 2 CAPITOLO 7 SERIE E POLINOMI DI TAYLOR Serie di Taylor di una funzione. Definizione di serie di Taylor Sia f(x) una funzione definita

Dettagli

Corso di Matematica per la Chimica

Corso di Matematica per la Chimica Dott.ssa Maria Carmela De Bonis a.a. 203-4 I sistemi lineari Generalità sui sistemi lineari Molti problemi dell ingegneria, della fisica, della chimica, dell informatica e dell economia, si modellizzano

Dettagli

Lezione 8. La macchina universale

Lezione 8. La macchina universale Lezione 8 Algoritmi La macchina universale Un elaboratore o computer è una macchina digitale, elettronica, automatica capace di effettuare trasformazioni o elaborazioni su i dati digitale= l informazione

Dettagli

LE FUNZIONI A DUE VARIABILI

LE FUNZIONI A DUE VARIABILI Capitolo I LE FUNZIONI A DUE VARIABILI In questo primo capitolo introduciamo alcune definizioni di base delle funzioni reali a due variabili reali. Nel seguito R denoterà l insieme dei numeri reali mentre

Dettagli

LINGUAGGI DI PROGRAMMAZIONE

LINGUAGGI DI PROGRAMMAZIONE LINGUAGGI DI PROGRAMMAZIONE Il potere espressivo di un linguaggio è caratterizzato da: quali tipi di dati consente di rappresentare (direttamente o tramite definizione dell utente) quali istruzioni di

Dettagli

OSSERVAZIONI TEORICHE Lezione n. 4

OSSERVAZIONI TEORICHE Lezione n. 4 OSSERVAZIONI TEORICHE Lezione n. 4 Finalità: Sistematizzare concetti e definizioni. Verificare l apprendimento. Metodo: Lettura delle OSSERVAZIONI e risoluzione della scheda di verifica delle conoscenze

Dettagli

2. Leggi finanziarie di capitalizzazione

2. Leggi finanziarie di capitalizzazione 2. Leggi finanziarie di capitalizzazione Si chiama legge finanziaria di capitalizzazione una funzione atta a definire il montante M(t accumulato al tempo generico t da un capitale C: M(t = F(C, t C t M

Dettagli

Introduzione al MATLAB c Parte 2

Introduzione al MATLAB c Parte 2 Introduzione al MATLAB c Parte 2 Lucia Gastaldi Dipartimento di Matematica, http://dm.ing.unibs.it/gastaldi/ 18 gennaio 2008 Outline 1 M-file di tipo Script e Function Script Function 2 Costrutti di programmazione

Dettagli

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012

Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012 Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono

Dettagli

Appunti del corso di Informatica 1 (IN110 Fondamenti) 4 Linguaggi di programmazione

Appunti del corso di Informatica 1 (IN110 Fondamenti) 4 Linguaggi di programmazione Università Roma Tre Dipartimento di Matematica e Fisica Corso di Laurea in Matematica Appunti del corso di Informatica 1 (IN110 Fondamenti) 4 Linguaggi di programmazione Marco Liverani (liverani@mat.uniroma3.it)

Dettagli

CONCETTO DI LIMITE DI UNA FUNZIONE REALE

CONCETTO DI LIMITE DI UNA FUNZIONE REALE CONCETTO DI LIMITE DI UNA FUNZIONE REALE Il limite di una funzione è uno dei concetti fondamentali dell'analisi matematica. Tramite questo concetto viene formalizzata la nozione di funzione continua e

Dettagli

Rappresentazione dei numeri in un calcolatore

Rappresentazione dei numeri in un calcolatore Corso di Calcolatori Elettronici I A.A. 2010-2011 Rappresentazione dei numeri in un calcolatore Lezione 2 Università degli Studi di Napoli Federico II Facoltà di Ingegneria Rappresentazione dei numeri

Dettagli

Concetto di Funzione e Procedura METODI in Java

Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile

Dettagli

Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria).

Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria). Politecnico di Milano. Facoltà di Ingegneria Industriale. Corso di Analisi e Geometria 2. Sezione D-G. (Docente: Federico Lastaria). Aprile 20 Indice Serie numeriche. Serie convergenti, divergenti, indeterminate.....................

Dettagli

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1)

APPUNTI DI MATEMATICA ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1) ALGEBRA \ INSIEMISTICA \ TEORIA DEGLI INSIEMI (1) Un insieme è una collezione di oggetti. Il concetto di insieme è un concetto primitivo. Deve esistere un criterio chiaro, preciso, non ambiguo, inequivocabile,

Dettagli

Elementi di semantica denotazionale ed operazionale

Elementi di semantica denotazionale ed operazionale Elementi di semantica denotazionale ed operazionale 1 Contenuti! sintassi astratta e domini sintattici " un frammento di linguaggio imperativo! semantica denotazionale " domini semantici: valori e stato

Dettagli

Appunti sulla Macchina di Turing. Macchina di Turing

Appunti sulla Macchina di Turing. Macchina di Turing Macchina di Turing Una macchina di Turing è costituita dai seguenti elementi (vedi fig. 1): a) una unità di memoria, detta memoria esterna, consistente in un nastro illimitato in entrambi i sensi e suddiviso

Dettagli

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI

INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI INTRODUZIONE AGLI ALGORITMI Prima di riuscire a scrivere un programma, abbiamo bisogno di conoscere un metodo risolutivo, cioè un metodo che a partire dai dati di ingresso fornisce i risultati attesi.

Dettagli

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto: Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante

Dettagli

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente.

Algoritmo. I dati su cui opera un'istruzione sono forniti all'algoritmo dall'esterno oppure sono il risultato di istruzioni eseguite precedentemente. Algoritmo Formalmente, per algoritmo si intende una successione finita di passi o istruzioni che definiscono le operazioni da eseguire su dei dati (=istanza del problema): in generale un algoritmo è definito

Dettagli

ESEMPIO 1: eseguire il complemento a 10 di 765

ESEMPIO 1: eseguire il complemento a 10 di 765 COMPLEMENTO A 10 DI UN NUMERO DECIMALE Sia dato un numero N 10 in base 10 di n cifre. Il complemento a 10 di tale numero (N ) si ottiene sottraendo il numero stesso a 10 n. ESEMPIO 1: eseguire il complemento

Dettagli

Matematica generale CTF

Matematica generale CTF Successioni numeriche 19 agosto 2015 Definizione di successione Monotonìa e limitatezza Forme indeterminate Successioni infinitesime Comportamento asintotico Criterio del rapporto per le successioni Definizione

Dettagli

1 Applicazioni Lineari tra Spazi Vettoriali

1 Applicazioni Lineari tra Spazi Vettoriali 1 Applicazioni Lineari tra Spazi Vettoriali Definizione 1 (Applicazioni lineari) Si chiama applicazione lineare una applicazione tra uno spazio vettoriale ed uno spazio vettoriale sul campo tale che "!$%!

Dettagli

Relazioni statistiche: regressione e correlazione

Relazioni statistiche: regressione e correlazione Relazioni statistiche: regressione e correlazione È detto studio della connessione lo studio si occupa della ricerca di relazioni fra due variabili statistiche o fra una mutabile e una variabile statistica

Dettagli

ALGEBRA DELLE PROPOSIZIONI

ALGEBRA DELLE PROPOSIZIONI Università di Salerno Fondamenti di Informatica Corso di Laurea Ingegneria Corso B Docente: Ing. Giovanni Secondulfo Anno Accademico 2010-2011 ALGEBRA DELLE PROPOSIZIONI Fondamenti di Informatica Algebra

Dettagli

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione Automatizzare i compiti ripetitivi I file batch Anno accademico 2000-01 1 Spesso capita di dover eseguire ripetutatmente una data sequenza di comandi Introdurli uno a uno da tastiera è un processo lento

Dettagli

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007

Correttezza. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 10. A. Miola Novembre 2007 Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1 Dispensa 10 Correttezza A. Miola Novembre 2007 http://www.dia.uniroma3.it/~java/fondinf1/ Correttezza 1 Contenuti Introduzione alla correttezza

Dettagli

Introduzione alla programmazione in C

Introduzione alla programmazione in C Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale

Dettagli

Uso di base delle funzioni in Microsoft Excel

Uso di base delle funzioni in Microsoft Excel Uso di base delle funzioni in Microsoft Excel Le funzioni Una funzione è un operatore che applicato a uno o più argomenti (valori, siano essi numeri con virgola, numeri interi, stringhe di caratteri) restituisce

Dettagli

Per lo svolgimento del corso risulta particolarmente utile considerare l insieme

Per lo svolgimento del corso risulta particolarmente utile considerare l insieme 1. L insieme R. Per lo svolgimento del corso risulta particolarmente utile considerare l insieme R = R {, + }, detto anche retta reale estesa, che si ottiene aggiungendo all insieme dei numeri reali R

Dettagli

Esercizi su. Funzioni

Esercizi su. Funzioni Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità

Dettagli

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it

Excel. A cura di Luigi Labonia. e-mail: luigi.lab@libero.it Excel A cura di Luigi Labonia e-mail: luigi.lab@libero.it Introduzione Un foglio elettronico è un applicazione comunemente usata per bilanci, previsioni ed altri compiti tipici del campo amministrativo

Dettagli

Convertitori numerici in Excel

Convertitori numerici in Excel ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel

Dettagli

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)

12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) 12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,

Dettagli

Alcune nozioni di base di Logica Matematica

Alcune nozioni di base di Logica Matematica Alcune nozioni di base di Logica Matematica Ad uso del corsi di Programmazione I e II Nicola Galesi Dipartimento di Informatica Sapienza Universitá Roma November 1, 2007 Questa é una breve raccolta di

Dettagli

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da

f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede

Dettagli

IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI

IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI Pagina 1 UN SISTEMA DI NEWS Sommario UN SISTEMA DI NEWS...1 Introduzione...2 Scelgo l'area su cui operare...3 Un minimo di teoria...3 Creo le Pagine...4 Definizione dello Schedario Novità...6 Compilo la

Dettagli

AA 2006-07 LA RICORSIONE

AA 2006-07 LA RICORSIONE PROGRAMMAZIONE AA 2006-07 LA RICORSIONE AA 2006-07 Prof.ssa A. Lanza - DIB 1/18 LA RICORSIONE Il concetto di ricorsione nasce dalla matematica Una funzione matematica è definita ricorsivamente quando nella

Dettagli

Il database management system Access

Il database management system Access Il database management system Access Corso di autoistruzione http://www.manualipc.it/manuali/ corso/manuali.php? idcap=00&idman=17&size=12&sid= INTRODUZIONE Il concetto di base di dati, database o archivio

Dettagli

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme

Proof. Dimostrazione per assurdo. Consideriamo l insieme complementare di P nell insieme G Pareschi Principio di induzione Il Principio di Induzione (che dovreste anche avere incontrato nel Corso di Analisi I) consente di dimostrare Proposizioni il cui enunciato è in funzione di un numero

Dettagli

Matematica 1 - Corso di Laurea in Ingegneria Meccanica

Matematica 1 - Corso di Laurea in Ingegneria Meccanica Matematica 1 - Corso di Laurea in Ingegneria Meccanica Esercitazione su massimi e minimi vincolati 9 dicembre 005 Esercizio 1. Considerare l insieme C = {(x,y) R : (x + y ) = x } e dire se è una curva

Dettagli

Metodologie di programmazione in Fortran 90

Metodologie di programmazione in Fortran 90 Metodologie di programmazione in Fortran 90 Ing. Luca De Santis DIS - Dipartimento di informatica e sistemistica Anno accademico 2007/2008 Fortran 90: Metodologie di programmazione DIS - Dipartimento di

Dettagli

Prodotto libero di gruppi

Prodotto libero di gruppi Prodotto libero di gruppi 24 aprile 2014 Siano (A 1, +) e (A 2, +) gruppi abeliani. Sul prodotto cartesiano A 1 A 2 definiamo l operazione (x 1, y 1 ) + (x 2, y 2 ) := (x 1 + x 2, y 1 + y 2 ). Provvisto

Dettagli

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo

Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo Nell esempio verrà mostrato come creare un semplice documento in Excel per calcolare in modo automatico la rata di un mutuo a tasso fisso conoscendo - la durata del mutuo in anni - l importo del mutuo

Dettagli

Calcolatori Elettronici A a.a. 2008/2009

Calcolatori Elettronici A a.a. 2008/2009 Calcolatori Elettronici A a.a. 2008/2009 PRESTAZIONI DEL CALCOLATORE Massimiliano Giacomin Due dimensioni Tempo di risposta (o tempo di esecuzione): il tempo totale impiegato per eseguire un task (include

Dettagli

Schemi delle Lezioni di Matematica Generale. Pierpaolo Montana

Schemi delle Lezioni di Matematica Generale. Pierpaolo Montana Schemi delle Lezioni di Matematica Generale Pierpaolo Montana Al-giabr wa al-mukabalah di Al Khuwarizmi scritto approssimativamente nel 820 D.C. Manuale arabo da cui deriviamo due nomi: Algebra Algoritmo

Dettagli

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo GESTIONE PROGETTO FORMATIVO Pag. 1 di 38 Portale tirocini Manuale utente Per la gestione del Progetto Formativo GESTIONE PROGETTO FORMATIVO Pag. 2 di 38 INDICE 1. INTRODUZIONE... 3 2. ACCESSO AL SISTEMA...

Dettagli

PROCESSO DI INDICIZZAZIONE SEMANTICA

PROCESSO DI INDICIZZAZIONE SEMANTICA PROCESSO DI INDICIZZAZIONE SEMANTICA INDIVIDUAZIONE DEI TEMI/CONCETTI SELEZIONE DEI TEMI/CONCETTI ESPRESSIONE DEI CONCETTI NEL LINGUAGGIO DI INDICIZZAZIONE TIPI DI INDICIZZAZIONE SOMMARIZZAZIONE INDICIZZAZIONE

Dettagli

Informatica. Rappresentazione dei numeri Numerazione binaria

Informatica. Rappresentazione dei numeri Numerazione binaria Informatica Rappresentazione dei numeri Numerazione binaria Sistemi di numerazione Non posizionali: numerazione romana Posizionali: viene associato un peso a ciascuna posizione all interno della rappresentazione

Dettagli

1. PRIME PROPRIETÀ 2

1. PRIME PROPRIETÀ 2 RELAZIONI 1. Prime proprietà Il significato comune del concetto di relazione è facilmente intuibile: due elementi sono in relazione se c è un legame tra loro descritto da una certa proprietà; ad esempio,

Dettagli

Algoritmi e strutture dati. Codici di Huffman

Algoritmi e strutture dati. Codici di Huffman Algoritmi e strutture dati Codici di Huffman Memorizzazione dei dati Quando un file viene memorizzato, esso va memorizzato in qualche formato binario Modo più semplice: memorizzare il codice ASCII per

Dettagli

Linguaggi di programmazione

Linguaggi di programmazione Linguaggi di programmazione Un calcolatore basato sul modello di von Neumann permette l esecuzione di un programma, cioè di una sequenza di istruzioni descritte nel linguaggio interpretabile dal calcolatore

Dettagli

EXCEL FUNZIONI PRINCIPALI

EXCEL FUNZIONI PRINCIPALI EXCEL FUNZIONI PRINCIPALI Funzione SE() Sintassi: SE(VERIFICA, VALORE SE VERO, VALORE SE FALSO): verifica un valore e ritorna una risposta in base al risultato vero/falso Esempio: =SE(A2=15; "OK"; "NO")

Dettagli

Dall italiano al linguaggio della logica proposizionale

Dall italiano al linguaggio della logica proposizionale Dall italiano al linguaggio della logica proposizionale Dall italiano al linguaggio della logica proposizionale Enunciati atomici e congiunzione In questa lezione e nelle successive, vedremo come fare

Dettagli

Introduzione alla teoria dei database relazionali. Come progettare un database

Introduzione alla teoria dei database relazionali. Come progettare un database Introduzione alla teoria dei database relazionali Come progettare un database La struttura delle relazioni Dopo la prima fase di individuazione concettuale delle entità e degli attributi è necessario passare

Dettagli

Traccia di soluzione dell esercizio del 25/1/2005

Traccia di soluzione dell esercizio del 25/1/2005 Traccia di soluzione dell esercizio del 25/1/2005 1 Casi d uso I casi d uso sono in Figura 1. Ci sono solo due attori: il Capo officina e il generico Meccanico. Figura 1: Diagramma dei casi d uso. 2 Modello

Dettagli

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it

Automazione Industriale (scheduling+mms) scheduling+mms. adacher@dia.uniroma3.it Automazione Industriale (scheduling+mms) scheduling+mms adacher@dia.uniroma3.it Introduzione Sistemi e Modelli Lo studio e l analisi di sistemi tramite una rappresentazione astratta o una sua formalizzazione

Dettagli

Introduzione ai tipi di dato astratti: applicazione alle liste

Introduzione ai tipi di dato astratti: applicazione alle liste Universitàdegli Studi di L Aquila Facoltàdi Scienze M.F.N. Corso di Laurea in Informatica Corso di Laboratorio di Algoritmi e Strutture Dati A.A. 2005/2006 Introduzione ai tipi di dato astratti: applicazione

Dettagli

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda

Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda Analisi sensitività. Strumenti per il supporto alle decisioni nel processo di Valutazione d azienda Premessa Con l analisi di sensitività il perito valutatore elabora un range di valori invece di un dato

Dettagli

+ / operatori di confronto (espressioni logiche/predicati) / + 5 3 9 = > < Pseudo codice. Pseudo codice

+ / operatori di confronto (espressioni logiche/predicati) / + 5 3 9 = > < Pseudo codice. Pseudo codice Pseudo codice Pseudo codice Paolo Bison Fondamenti di Informatica A.A. 2006/07 Università di Padova linguaggio testuale mix di linguaggio naturale ed elementi linguistici con sintassi ben definita e semantica

Dettagli

Errori più comuni. nelle prove scritte

Errori più comuni. nelle prove scritte Errori più comuni nelle prove scritte Gli errori più frequenti, e reiterati da chi sostiene diverse prove, sono innanzi tutto meta-errori, cioè errori che non riguardano tanto l applicazione delle tecniche,

Dettagli

Variabili e tipi di dato

Variabili e tipi di dato Variabili e tipi di dato Tutte le variabili devono essere dichiarate, specificandone il tipo La dichiarazione deve precedere l uso Il tipo è un concetto astratto che esprime: L allocazione di spazio per

Dettagli

Elementi di Psicometria con Laboratorio di SPSS 1

Elementi di Psicometria con Laboratorio di SPSS 1 Elementi di Psicometria con Laboratorio di SPSS 1 12-Il t-test per campioni appaiati vers. 1.2 (7 novembre 2014) Germano Rossi 1 germano.rossi@unimib.it 1 Dipartimento di Psicologia, Università di Milano-Bicocca

Dettagli

Lezione 9: Cambio di base

Lezione 9: Cambio di base Lezione 9: Cambio di base In questa lezione vogliamo affrontare uno degli argomenti piu ostici per lo studente e cioè il cambio di base all interno di uno spazio vettoriale, inoltre cercheremo di capire

Dettagli

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due:

I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due: Il modello relazionale I database relazionali sono il tipo di database attualmente piu diffuso. I motivi di questo successo sono fondamentalmente due: 1. forniscono sistemi semplici ed efficienti per rappresentare

Dettagli

Database. Si ringrazia Marco Bertini per le slides

Database. Si ringrazia Marco Bertini per le slides Database Si ringrazia Marco Bertini per le slides Obiettivo Concetti base dati e informazioni cos è un database terminologia Modelli organizzativi flat file database relazionali Principi e linee guida

Dettagli

Parte 2. Determinante e matrice inversa

Parte 2. Determinante e matrice inversa Parte. Determinante e matrice inversa A. Savo Appunti del Corso di Geometria 013-14 Indice delle sezioni 1 Determinante di una matrice, 1 Teorema di Cramer (caso particolare), 3 3 Determinante di una matrice

Dettagli

Laboratorio di Informatica

Laboratorio di Informatica Laboratorio di Informatica Introduzione a Python Dottore Paolo Parisen Toldin - parisent@cs.unibo.it Argomenti trattati Che cosa è python Variabili Assegnazione Condizionale Iterazione in una lista di

Dettagli

II.f. Altre attività sull euro

II.f. Altre attività sull euro Altre attività sull euro II.f È consigliabile costruire modelli in carta o cartoncino di monete e banconote, e farli usare ai bambini in varie attività di classe fin dal primo o al più dal secondo anno.

Dettagli

Cenni su algoritmi, diagrammi di flusso, strutture di controllo

Cenni su algoritmi, diagrammi di flusso, strutture di controllo Cenni su algoritmi, diagrammi di flusso, strutture di controllo Algoritmo Spesso, nel nostro vivere quotidiano, ci troviamo nella necessità di risolvere problemi. La descrizione della successione di operazioni

Dettagli

Codifica: dal diagramma a blocchi al linguaggio C++

Codifica: dal diagramma a blocchi al linguaggio C++ Codifica: dal diagramma a blocchi al linguaggio C++ E necessario chiarire inizialmente alcuni concetti. La compilazione Il dispositivo del computer addetto all esecuzione dei programmi è la CPU La CPU

Dettagli

a b c Figura 1 Generatori ideali di tensione

a b c Figura 1 Generatori ideali di tensione Generatori di tensione e di corrente 1. La tensione ideale e generatori di corrente Un generatore ideale è quel dispositivo (bipolo) che fornisce una quantità di energia praticamente infinita (generatore

Dettagli

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014

LUdeS Informatica 2 EXCEL. Seconda parte AA 2013/2014 LUdeS Informatica 2 EXCEL Seconda parte AA 2013/2014 STAMPA Quando si esegue il comando FILE STAMPA, Excel manda alla stampante tutte le celle del foglio di lavoro corrente che hanno un contenuto. Il numero

Dettagli

Matematica generale CTF

Matematica generale CTF Equazioni differenziali 9 dicembre 2015 Si chiamano equazioni differenziali quelle equazioni le cui incognite non sono variabili reali ma funzioni di una o più variabili. Le equazioni differenziali possono

Dettagli

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile

Corso di Informatica Generale (C. L. Economia e Commercio) Ing. Valerio Lacagnina Rappresentazione in virgola mobile Problemi connessi all utilizzo di un numero di bit limitato Abbiamo visto quali sono i vantaggi dell utilizzo della rappresentazione in complemento alla base: corrispondenza biunivoca fra rappresentazione

Dettagli

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000

lo 2 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Capittol lo 2 Visualizzazione 2-1 - PERSONALIZZARE LA FINESTRA DI WORD 2000 Nel primo capitolo sono state analizzate le diverse componenti della finestra di Word 2000: barra del titolo, barra dei menu,

Dettagli

La manutenzione come elemento di garanzia della sicurezza di macchine e impianti

La manutenzione come elemento di garanzia della sicurezza di macchine e impianti La manutenzione come elemento di garanzia della sicurezza di macchine e impianti Alessandro Mazzeranghi, Rossano Rossetti MECQ S.r.l. Quanto è importante la manutenzione negli ambienti di lavoro? E cosa

Dettagli

Semantica operazionale dei linguaggi di Programmazione

Semantica operazionale dei linguaggi di Programmazione Semantica operazionale dei linguaggi di Programmazione Oggetti sintattici e oggetti semantici Rosario Culmone, Luca Tesei Lucidi tratti dalla dispensa Elementi di Semantica Operazionale R. Barbuti, P.

Dettagli

I file di dati. Unità didattica D1 1

I file di dati. Unità didattica D1 1 I file di dati Unità didattica D1 1 1) I file sequenziali Utili per la memorizzazione di informazioni testuali Si tratta di strutture organizzate per righe e non per record Non sono adatte per grandi quantità

Dettagli