Programmazione funzionale Linguaggi Funzionali /aa. 03 - M.Bellia Programmazione funzionale Computer and Modelling Funzione: valore e operazioni Types Haskell: Programming Definizioni e Scripts Proofs Valutazione Usiamo Hugs Moduli e prelude.hs Esempi di programmi Esercizi 4/15/2019
Computer and modelling Linguaggi Funzionali /aa. 03 - M.Bellia Computer and modelling Computer Profondamente rinnovati nella tecnologie della componentistica Onnipresenti (mainframes, Pc,…, automobili, telefonia, elettrodomestici,… Invariati nei fondamenti: Esprimono: Funzioni Calcolabili Utilizzati: Programmi per manipolare informazione simbolica Linguaggi (esecutori,…) Applicazioni Continua crescita Richiedono adeguati linguaggi 4/15/2019
Linguaggi Funzionali /aa. 03 - M.Bellia Adeguati linguaggi Linguaggi Applicazioni specifiche HTML, XML, …, Scripting Programmazione Linguaggi di Programmazione Imperativi: p. calcolano ma modificano anche lo stato Applicativi: p. calcolano solo Logici: Prolog Algebrici: OBJ funzionali 4/15/2019
Linguaggi Funzionali Caratteristiche Essenziali Si distinguono: Funzioni come valori Trasparenza referenziale Funzioni come unici valori Si distinguono: Puri Non Puri: estesi con caratteristiche non funzionali Side effects: setq, rplca.. Metaprogramming: S-exp, define, eval, Indeboliti su caratteristiche funzionali Trasparenza e typing non stretto 4/15/2019
Linguaggi Funzionali - 2 Fondamenti -calcolo e -calcolo tipato: Teorie di funzioni (calcolabili) Teorie algebriche (assiomatiche) Modello di calcolo Derivato dalle teorie e basato sulla riduzione algebrica Utilizzabile in tutte le applicazioni della programmazione (rapida prototipazione) Sperimentazione e sviluppo di nuovi linguaggi Esempio: il meta linguaggio con cui si descrive la semantica di un linguaggio è un linguaggio funzionale. Esistono modelli funzionali per tutti i vari modelli di calcolo non funzionale (inlcuse MdT) e per i linguaggi di un certo rilievo (Object Calculus e Calcolo di function records per gli OO) 4/15/2019
Linguaggi Funzionali /aa. 03 - M.Bellia Funzione Cos’è una funzione f::A->B : Relazione Binaria f A x B Univoca xA, #{(x,y) f}=1 dove: #=cardinallità Relazione Binaria? Somma è binaria? Isomorfismo: NkN dove: N=naturali, =calcolabili NNN N x N N N N N N (N N) Valori e operazioni 4/15/2019
Linguaggi Funzionali /aa. 03 - M.Bellia Valori e operazioni Come si esprime una funzione? Introduce-- astrazione (o generalizzazione) Sintassi diverse: x.* 2 x \x->2*x {(x,2*x)} Astrazioni diverse (funzionali) f. x. f 2 x Calcola-- espressioni Operazioni Applicazione-- g: A->B, a: A (Sintassi diverse:) g a : B g (\ f -> \ y -> f y), a (+ 1) Composizione-- f: B->C, g: A->B (sintassi diverse:) f.g : A->C 4/15/2019
types Associati alle espressioni Classificano le strutture componenti e : A Classificano le strutture componenti f : B->C , g : A->B Controllano le composizioni f.g : A->C g.f : errore Strong: Unicità e Staticamente determinato 4/15/2019
Haskell 1990 Pure Picture and functions Higher Order, Strongly typed, Lazy … Language Picture and functions 2-dim. Picture Operazioni: flipV, flipH, invertColour, superimpose, above, sideBySide, … 4/15/2019
Definizioni Programma = insieme di definizioni che introducono tipi e “valori” su cui opereremo con… Scripts Moduli Definizioni: Tipi: type idT = exprT Valori: IdV :: type IdV = exprV type Picture = [[char]] horse :: Picture horse = … 4/15/2019
Pictures abstract data types implementazione Module Picture rotateHorse :: Picture rotateHorse = flipH (flipV horse) IdV x1 … xn = exprV (valori funzione con parametri) rotate :: Picture -> Picture rotate x = flipH (flipV x) oppure rotate = flipH.flipV abstract data types rotate ignora la implementazione Meccanismi di visibilità (moduli) implementazione [[char]]: implementa come una lista di linee Module Picture 4/15/2019
Implementazione implementazione [[char]]: implementa come una sequenza di linee flipH = Invertiamo l’ordine della sequenza di linee = reverse flipV = Mantieniamo la sequenza ma Invertiamo l’ordine di ogni linea = map reverse map: (a -> b) -> [a] -> [b] 4/15/2019
Proofs una proprietà: flipH.flipV = flipV.flipH dim. FlipH manipola la sequenza di linee flipV manipola le sole linee della sequenza Manipolano in modo ortogonale 4/15/2019
valutazione Riduzione di termine Sia double n = 2 * n Valutiamo: 23 - (2 * (3+1)) --- def. Double 23 - (2 * 4) --- arith. + 23 - 8 --- arith. * 15 --- arith. - 23 - (double (3+1)) 23 - (double 4) 23 - (2 * 4) … 4/15/2019
Usiamo Hugs Istallazione Ambiente interattivo Espressioni di top level Hugs da unix Espressioni di top level Alcuni esempi Comandi di gestione ambiente Panoramica (dipende dalla piattaforma) Configurazione :Set -E****** 4/15/2019
Moduli e Prelude.hs Programmi sono collezioni di moduli Nomi: Capital letter (maiuscola) Import / Export visibilità La collezione forma una gerarchia con Top Altrimenti un modulo Main Prelude.hs Built-in data e functions: integer, list, tuple etc. e loro operazioni 4/15/2019
Esempi di programmi Modulo FirstLiterate.lhs Modulo Picture: Loading Esecuzione di espressioni square size square double(squar 2) $$ 2 double Modulo Picture: Load Esecuzione horse rotate horse 4/15/2019
Esercizi Modulo PictureT: Ex. 2.2 Ex. 2.3 Definire: estendere Picture con: unaTT: una modifica di horse Rote90: rotazione di 90 right isTruePicture: predicato Ex. 2.2 Rettangolo nero utilizzando le sole operazioni (superimpose, etc.) Ex. 2.3 Scacchiera 8 x 8 4/15/2019