Informaica 3 Informaica 3 LEZIONE 9: Inroduzione ai linguaggi funzionali Modulo 1: Inroduzione ai linguaggi funzionali Modulo 2: LISP Lezione 9 - Modulo 1 Inroduzione ai linguaggi funzionali Poliecnico di Milano - Prof. Sara Comai 1 Poliecnico di Milano - Prof. Sara Comai 2 Linguaggi imperaivi Linguaggi di von Neumann (imperaivi) Concei fondamenali: variabili, assegnameno, sequenza di isruzioni Lo sao di un programma viene manenuo in variabili Si può modificare il valore di una variabile ramie l isruzione di assegnameno l effeo di un programma dipende dall ordine di esecuzione delle isruzioni: il valore della variabile è diverso prima e dopo l assegnameno Una è una sequenza di isruzioni che specifica l algorimo per oenere il risulao desiderao Largo uso dell ierazione Paradigma funzionale Paradigma funzionale: si basa sulla eoria delle funzioni maemaiche Una maemaica associa al valore del dominio un valore nel codominio Una vola specificao il valore del dominio queso non viene cambiao (variabile inesa in senso maemaico) Funzione come mapping: insieme di coppie che legano ogni valore del dominio in un valore del codominio Largo uso della ricorsione e della composizione di funzioni Poliecnico di Milano - Prof. Sara Comai 3 Poliecnico di Milano - Prof. Sara Comai 4
Definizione e applicazione di funzioni Composizione di funzioni e ricorsione Definizione di una : quadrao: ineri--> naurali quadrao(n) n x n -- signaure -- regola di mapping Si possono creare nuove funzioni a parire da alre funzioni F G o H l applicazione di F è equivalene all applicazione di G sul risulao dell applicazione di H paramero (variabile maemaica: rappresena un qualsiasi valore del dominio) Applicazione di una : quadrao(2) risulao: 4 (codominio) argomeno la sosiuzione è di ipo esuale Poliecnico di Milano - Prof. Sara Comai 5 Una può essere definia come combinazione o applicazione di alre funzioni Mole funzioni sono definie in modo ricorsivo: la definizione di una coniene l applicazione della sessa Esempio: n! if n=0 hen 1 else n*(n-1)! Poliecnico di Milano - Prof. Sara Comai 6 Linguaggi funzionali Componeni dei linguaggi funzionali: insiemi di oggei es. lise o array insieme di funzioni predefinie es. funzioni per manipolare le lise o gli array insieme di forme funzionali per cosruire nuove funzioni es. composizione di funzioni Esecuzione di un programma funzionale Si basa sui meccanismi di binding associa un valore alle variabili (valore: dao oppure ) applicazione riorna il valore del codominio Le funzioni manipolano espressioni: cosani, variabili e funori Per valuare un espressione devono essere definii i binding ra variabili e cosani ambiene: maniene ui i binding Il processo di valuazione può essere definio in modo ricorsivo ramie una eval(e), dove e è un espressione: eval(c)=c eval(x)=a se a x viene associao ramie binding il valore a eval(f(e1,e2,,en)) = f(eval(e1), eval(e2),, eval(en)) Poliecnico di Milano - Prof. Sara Comai 7 Poliecnico di Milano - Prof. Sara Comai 8
Informaica 3 Lezione 9 - Modulo 2 LISP Il LISP LIS Processor (McCarhy, 1960) Linguaggio non ipizzao non esisono dichiarazioni di ipo Linguaggio inerpreao Tani dialiei del LISP Anni 80: enaivo di sandardizzazione --> Common LISP Poliecnico di Milano - Prof. Sara Comai 9 Poliecnico di Milano - Prof. Sara Comai 10 S-espressioni S-espressioni: aomi e lise Es. di aomi: a, 4, casa, num1 Es. di lise: (), (a), (a 4 casa), ((a 4) sara (num1)) Vengono uilizzae per rappresenare: dai applicazioni di funzioni definizioni di funzioni Esempi Esempi di S-espressione: 5 dao (+ 1 5 6) applicazione della + agli argomeni 1 5 e 6 (defun quadrao (x) (* x x)) definizione di una Poliecnico di Milano - Prof. Sara Comai 11 Poliecnico di Milano - Prof. Sara Comai 12
Aomi Aomo: numero oppure nome un numero rappresena l r-value un nome rappresena un valore ad esso associao, quindi l l-value Aomi predefinii: numeri: la loro valuazione è il numero sesso : valore booleano vero : valore booleano falso Associazione di un valore ad un simbolo: (seq a 1) -- assegna 1 all aomo a Lise Le lise vengono inerpreae come una sequenza che coniene il nome di una seguia dagli argomeni della (nome- arg1 arg2...) Es. (+ 1 4 5 6) -- 16 (seq a 1) (+ a 2) -- 3 Lise predefinie: Lisa vuoa: () o Oss: () e (()) non rappresenano lo sesso oggeo () è una lisa vuoa (()) è una lisa con un elemeno () Poliecnico di Milano - Prof. Sara Comai 13 Poliecnico di Milano - Prof. Sara Comai 14 Funzioni primiive Funzioni maemaiche: + - * / exp log sqr sin cos an max min... Funzioni per manipolare le lise cosruire le lise: cons, lis e append esrarre dai dalle lise: car (firs) e cdr (res) Cons, Lis e Append cons aggiunge un elemeno in esa alla lisa (cons 1 ) (1) (cons 1 (cons 2 )) (1 2) (cons 1 (a 3 b))??? (cons 1 (a 3 b)) (1 a 3 b) (cons a (b c d)) (a b c d) lis cosruisce una lisa a parire dai suoi argomeni (lis 2 3 4) (2 3 4) (lis a (b c d)) (a (b c d)) (lis) (lis (lis a b) c) ((a b) c) Poliecnico di Milano - Prof. Sara Comai 15 append cosruisce una lisa a parire dai membri delle lise degli argomeni (append 2 3 4) (2 3 4) (append (a b) (c d)) (a b c d) (append (a) () (b)) (a b) (append (a) () ((a) (b))) (a (a) (b)) Poliecnico di Milano - Prof. Sara Comai 16
Car e cdr Alre funzioni sulla lisa (car lisa) o (firs lisa): ha come valore il primo elemeno della lisa (cdr lisa) o (res lisa): ha come valore la lisa privaa del primo elemeno (lengh (1 2 3)) 3 (lengh lisa) 4 lisa=(a (b c) ((d e)) (f)) Esempio: (seq lisa (a (b c) ((d e)) (f))) lisa=(a (b c) ((d e)) (f)) (car lisa) a (cdr lisa) ((b c) ((d e)) (f))) (car (cdr lisa)) (b c) Noa: car e cdr non modificano il valore di lisa! lisa=(a (b c) ((d e)) (f)) (seq lisa (cdr (car (cdr (lisa))))) c (cdr lisa) (aom 1) (aom lisa) (lisp 1) (lisp lisa) Poliecnico di Milano - Prof. Sara Comai 17 Poliecnico di Milano - Prof. Sara Comai 18 Definizione di funzioni e programmi LISP Esempio: che calcola il quadrao di un numero definizione (defun quadrao (num) (* num num)) (* num num) predefinia nome argomeni argomeni corpo della (espressioni da valuare) Un programma LISP viene definio come una! Poliecnico di Milano - Prof. Sara Comai 19 Processo di valuazione Una S-espressione è valuaa dalla eval, all inerno di un ambiene che maniene ui i binding ra le variabili ed i valori Ambiene globale iniziale: : : La viene applicaa ai suoi argomeni viene generao un ambiene locale per la Es. (defun quadrao (num) (* num num)) ambiene globale: viene eseso con il binding ra quadrao e la sua definizione (quadrao 2) l ambiene globale viene eseso con un ambiene locale che lega i parameri formali ai valori dei parameri auali si valua il corpo della si riprisina l ambiene di parenza Poliecnico di Milano - Prof. Sara Comai 20
Esempi: Composizione di funzioni (* (+ a b) (+ a c)) calcola (a+b)*(a+c) (defun h(x) (g (f (x))) definisce h(x)=g(f(x)) Selezione (if <es> <hen> <else>) Esempio: calcolo del valore assoluo di un numero (defun valore-assoluo (x) (if (< x 0) (* x 1) (x))) Poliecnico di Milano - Prof. Sara Comai 21 Poliecnico di Milano - Prof. Sara Comai 22 Selezione (cond (<es1><...><resul1>) (<es2><...><resul2>)... (<esn><...><resuln>)) cond corrisponde al cosruo if-hen-else: cond coniene una sequenza di es che vengono valuai in sequenza fino a quando un es dà valore vero; se nessun es è vero la resiuisce Esempio: calcolo del valore assoluo di un numero (defun valore-assoluo (x) (cond ((< x 0) (* x 1)) ( x))) Oss: qualsiasi valore diverso da è vero (defun valore-assoluo (x) (cond ((< x 0) (* x 1)) (x))) Poliecnico di Milano - Prof. Sara Comai 23 Predicai (= x y ) resiuisce se x e y sono numericamene uguali (= 3 3.0) (equal x y ) resiuisce se x e y hanno la sessa rappresenazione quando vengono sampai (equal 3 3.0) (equal 3 3) (null l) resiuisce se l è la lisa vuoa (null ()) Poliecnico di Milano - Prof. Sara Comai 24
Le Permee di memorizzare il valore in una variabile emporanea (le ((<var> <valore>)... (<var> <valore>)) <espressioni>) Esempio: d = a/b; e = c*d; d = d+e; (le ((d (/ a b))) (+ d (* c d)))) Funzioni ricorsive Ricorsione su una lisa verificare che la lisa non sia erminaa (condizione di erminazione) uilizzare il primo elemeno della lisa applicare la ricorsione sul reso della lisa Esempio 1: calcolo di x elevao a y (defun poenza (x y) (if (= y 0) 1 (* x (poenza x (- y 1))))) Aenzione: condizione di erminazione! Poliecnico di Milano - Prof. Sara Comai 25 Poliecnico di Milano - Prof. Sara Comai 26 Funzioni ricorsive (2) Funzioni ricorsive (3) Esempio 2: conare il numero di elemeni in una lisa (che non coniene lise annidae) (defun cona (lisa) (if (null lisa) 0 (+ 1 (cona (cdr lisa))))) Esempio 3: conare il numero di soo-lise preseni in una lisa (defun cona (lisa) (cond ((null lisa) 0) ((lisp (car lisa)) (+ 1 (cona (cdr lisa)))) ( (cona (cdr lisa)))) Poliecnico di Milano - Prof. Sara Comai 27 Poliecnico di Milano - Prof. Sara Comai 28