Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
1
Programmazione funzionale
Linguaggi Funzionali /aa 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
2
Computer and modelling
Linguaggi Funzionali /aa 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
3
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
4
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
5
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
6
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
7
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
8
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
9
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
10
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
11
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
12
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
13
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
14
valutazione Riduzione di termine Sia double n = 2 * n Valutiamo:
23 - (2 * (3+1)) --- def. Double 23 - (2 * 4) --- arith. + arith. * arith. - 23 - (double (3+1)) 23 - (double 4) 23 - (2 * 4) … 4/15/2019
15
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
16
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
17
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
18
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
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.