Programmazione Funzionale



Похожие документы
LINGUAGGI DI PROGRAMMAZIONE

Elementi di semantica operazionale

Brevissima introduzione al Lisp

Elementi di semantica denotazionale ed operazionale

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

MATLAB. Caratteristiche. Dati. Esempio di programma MATLAB. a = [1 2 3; 4 5 6; 7 8 9]; b = [1 2 3] ; c = a*b; c

Corso di Linguaggi di Programmazione

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

FONDAMENTI di INFORMATICA L. Mezzalira

Semantica dei programmi. La semantica dei programmi è la caratterizzazione matematica dei possibili comportamenti di un programma.

Concetto di Funzione e Procedura METODI in Java

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

Funzioni in C. Violetta Lonati

GESTIONE INFORMATICA DEI DATI AZIENDALI

Tipi di Dato Ricorsivi

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:

Lezione 8. La macchina universale

Programmazione dinamica

Agent and Object Technology Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Fondamenti di Informatica

Oggetti Lezione 3. aspetti generali e definizione di classi I

Le variabili. Olga Scotti

Algebra di Boole: Concetti di base. Fondamenti di Informatica - D. Talia - UNICAL 1. Fondamenti di Informatica

Progettazione di Basi di Dati

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

Università degli studi di Roma Tor Vergata Ingegneria Medica Informatica I Programma del Corso

Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 2

(anno accademico )

Programmazione I - Laboratorio

LE FUNZIONI A DUE VARIABILI

Sottoprogrammi: astrazione procedurale

Modellazione dei dati in UML

INFORMATICA 1 L. Mezzalira

AA LA RICORSIONE

Introduzione ai Metodi Formali

La selezione binaria

ALGEBRA DELLE PROPOSIZIONI

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi.

Appunti di Sistemi Elettronici

Nascita di Java. Che cos e Java? Caratteristiche di Java. Java: linguaggio a oggetti

OBIETTIVI SPECIFICI DI APPRENDIMENTO

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

Introduzione alla programmazione in C

CAPACITÀ DI PROCESSO (PROCESS CAPABILITY)

Introduzione alla Programmazione e Applicazioni per la Finanza M2 (Prodotti Derivati) Lezione 9

Il Software. Il software del PC. Il BIOS

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

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

I Problemi e la loro Soluzione. Il Concetto Intuitivo di Calcolatore. Risoluzione di un Problema. Esempio

I metodi formali nel processo di sviluppo del software

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

Richiesta pagina PHP (es: index.php)

Linguaggio C. Fondamenti. Struttura di un programma.

Stefania Marrara - Esercitazioni di Tecnologie dei Sistemi Informativi. Integrazione di dati di sorgenti diverse

Brevissima introduzione al Lisp

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

Java:Struttura di Programma. Fabio Scanu a.s. 2014/2015

Soluzione dell esercizio del 2 Febbraio 2004

Risolvere un problema significa individuare un procedimento che permetta di arrivare al risultato partendo dai dati

Definizione di nuovi tipi in C

Algebra Booleana 1 ALGEBRA BOOLEANA: VARIABILI E FUNZIONI LOGICHE

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

Cenni su algoritmi, diagrammi di flusso, strutture di controllo

Basi di dati. Il Modello Relazionale dei Dati. K. Donno - Il Modello Relazionale dei Dati

Proff. Fabio Ciao e Raffaele Bortone

Progetto Lauree Scientifiche Liceo Classico L.Ariosto, Ferrara Dipartimento di Matematica Università di Ferrara 24 Gennaio 2012

Alcune nozioni di base di Logica Matematica

Analisi dei requisiti e casi d uso

Introduzione all' OO in Python

Linguaggi di Programmazione LISP

Algoritmi e strutture dati. Codici di Huffman

3. Programmazione strutturata (testo di riferimento: Bellini-Guidi)

Matlab: Funzioni. Informatica B. Daniele Loiacono

Metodologie di programmazione in Fortran 90

La prima applicazione Java. Creazione di oggetti - 1. La prima applicazione Java: schema di esecuzione. Gianpaolo Cugola - Sistemi Informativi in Rete

LABORATORIO DI PROGRAMMAZIONE EDIZIONE 1, TURNO B

Inizializzazione, Assegnamento e Distruzione di Classi

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

Linguaggi di programmazione

CONTENUTI METODOLOGIA STRUMENTI METODO DI STUDIO VALUTAZIONE ANNO COMPETENZE OBIETTIVI DI APPRENDIMENTO

Ricorsione. Rosario Culmone. - p. 1/13

Capitolo 7: Teoria generale della calcolabilitá

LAB LEZ. 1 STATISTICA DESCRITTIVA CON R

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

Nozione di algoritmo. Gabriella Trucco

Fondamenti dell Informatica Ricorsione e Iterazione Simona Ronchi Della Rocca (dal testo: Kfoury, Moll and Arbib, cap.5.2)

Corso di INFORMATICA 2 (Matematica e Applicazioni)

Транскрипт:

Programmazione Funzionale LP imperativi: apparenza simile modello di progettazione = macchina fisica Famiglia dei LP imperativi = progressivo miglioramento del FORTRAN Obiezione: pesante aderenza dei LP alla macchina fisica = restrizione non necessaria al processo di sviluppo del software Possibilità di modelli alternativi di progettazione dei LP Paradigma funzionale: basato sulle funzioni matematiche LP funzionali 1

Funzioni Matematiche Funzione matematica = mapping: dominio codominio : specificato da espressione tabella Funzione applicabile ad un elemento del dominio f Valutazione della espressione di mapping: controllata da expr condizionali ricorsione fact(n = 1 se n = 0 n fact(n-1 se n > 0 Funzione matematica: definisce un valore (non una sequenza di operazioni su variabili in memoria per produrre un valore variabili effetti collaterali valore della funzione dipende solo dai suoi argomenti 2

Funzioni Semplici Def di funzione: nome (lista-di-parametri expr-di-mapping cubo(x = x*x*x dominio = codominio = R Valutazione della expr di mapping: x rappresenta un (immutabile elemento Applicazione della funzione: associazione f elemento-del-dominio cubo(2.0 8.0 3

Forme Funzionali Funzione di ordine superiore parametri sono funzioni risultato è una funzione Esempi: 1. Composizione di funzioni: f(x x+2 g(x 3*x h(x f g f(g(x = (3*x+2 2. Costruzione: f(x x*x g(x 2*x h(x x/2 [f, g, h](4 (16, 8, 2 3. Applicazione universale: f(x x*x map(f,(2,3,4 (4,9,16 4

Fondamenti dei LP Funzionali Obiettivo: massimizzazione delle similarità con funzioni matematiche Approccio al problem-solving: molto diverso da quello dei LP imperativi Programma = { def di funzioni } + { applicazioni di funzioni } Esecuzione = valutazione delle applicazioni delle funzioni Poichè var assegnabili impossibile controllare cicli (conteggio, condizionali ricorsione stato del programma risultato dipende solo dagli argomenti trasparenza referenziale FPL fornisce { funzioni primitive } { forme funzionali } costruzione di funzioni complesse partendo da primitive operazione di applicazione delle funzioni strutture dati Pb delle funzioni nei LP imperativi restrizione sui tipi di valori restituiti forme funzionali ridotte effetti collaterali 5

1958 John Mc Carthy Marvin Minsky Scheme MIT AI Project progettazione di un LP per la manipolazione di liste: Lisp Caratteristiche: Solo due tipi di strutture dati atomi identificatori sequenze di cifre liste: delimitate da parentesi (A B C D (A (B C D (E (F G Paradigma funzionale non necessario assegnamento Omogeneità della rappresentazione di dati codice (A B C D lista di 4 elementi applicazione di A a B, C, D Impatto: domina le applicazioni AI per 25 anni Discendenti del Lisp Common Lisp Scheme diversi tipi di strutture dati scope statico e dinamico packages Subset di Scheme senza assegnamento FPL Turing-completo quando tipo intero creazione di funzioni condizionali ricorsione 6

Espressioni Notazione prefissa con parentesi (+ 2 3 possibilità di numero variabile di argomenti (+ ; valutata 0 (+ 5 ; valutata 5 (+ 5 4 3 2 1 ; valutata 15 (* ; valutata 1 (* 5 ; valutata 5 (* 1 2 3 4 5 ; valutata 120 Liste per rappresentare dati funzioni primo elemento della lista operatore nome funzione Espressioni complesse mediante liste innestate 5*4+(6 2 (+ (* 5 4 ( 6 2 + * 5 4 6 2 Valori globali (define d 120 cambia l ambiente (unica nel nostro subset 7

Valutazione delle Espressioni Governate da 3 regole: 1. Nomi sostituiti dai loro binding correnti (define d 120... d ; 120 (+ d 5 ; 125 2. Liste valutate come chiamate di funzioni scritte in forma prefissa (+ ; invoca + senza argomenti (+ 5 ; invoca + con un argomento (+ 5 4 3 2 1 ; invoca + con cinque argomenti (+ (5 4 3 2 1 ; errore: cerca di valutare 5 come una funzione (d ; errore: d non è una funzione 3. Costanti sono valutate come se stesse 5 ; valutato 5 #t ; valutato true (predefinito #f ; valutato false (predefinito Inibizione della valutazione di un nome (define colori (quote (rosso giallo verde (define colori '(rosso giallo verde (define x d ; definisce x col valore di d (120 (define x 'f ; definisce x come simbolo f (define uncolore 'rosso ; definisce uncolore come rosso (define uncolore rosso ; errore: rosso non definito 8

Liste (define pari '(0 2 4 6 8 (define dispari '(1 3 5 7 9 (A (B C D (E (F G 0 A 2 4 6 8 nil B C nil D E nil nil Costruzione: (cons elem lista F G nil (cons 8 ( ; (8 (cons 6 (cons 8 ( ; (6 8 (cons 4 (cons 6 (cons 8 ( ; (4 6 8 9

Lista = testa + coda Liste (ii (car pari ; 0 (cdr pari ; (2 4 6 8 (car (cdr pari ; 2 (cadr pari ; 2 (cdr (cdr pari ; (4 6 8 (cddr pari ; (4 6 8 (car '(6 8 ; 6 (cdr '(6 8 ; (8 (car '(8 ; 8 (cdr '(8 ; ( Costruzione di liste list append crea la lista dei suoi argomenti concatenazione dei due argomenti lista (list 1 2 3 4 ; (1 2 3 4 (list '(1 2 '(3 4 5 ; ((1 2 (3 4 5 (list pari dispari ; ((0 2 4 6 8 (1 3 5 7 9 (list 'pari 'dispari ; (pari dispari (append '(1 2 '(3 4 ; (1 2 3 4 (append pari dispari ; (0 2 4 6 8 1 3 5 7 9 (append '(1 2 ( ; (1 2 (append '(1 2 (list 3 ; (1 2 3 10

Test di emptyness: null? Liste (iii (null? '( ; #t (null? pari ; #f (null? '(1 2 3 ; #f (null? 5 ; #f Test di uguaglianza: equal? (equal? 5 5 ; #t (equal? 5 1 ; #f (equal? '(1 2 '(1 2 ; #t (equal? 5 '(5 ; #f (equal? '(1 2 3 '(1 (2 3 ; #f (equal? '(1 2 '(2 1 ; #f (equal? ( ( ; #t Test di tipo: tipo (list? pari ; #t (symbol? 'pari ; #t (number? 3 ; #t (atom? pari ; #f simbolo atomo numero lista 11

Costrutti di Controllo Selezione a una via (if test parte-then (if (< x 0(+ x 1 altrimenti, restituisce un nullo (#void Selezione a due vie (if test parte-then parte-else (if (< x y x y 12

Definizione di Funzioni (define nome (lambda (argomenti corpo binding(nome, λ-astrazione (define min (lambda (x y(if (< x y x y (define (min x y(if (< x y x y (define (abs x(if (< x 0 ( 0 x x (define (fattoriale n (if (< n 1 1 (* n (fattoriale ( n 1 13

Computazione iterativa ricorsione Definizione di Funzioni (ii (define (sommatoria numeri (if (null? numeri 0 (+ (car numeri (sommatoria (cdr numeri piede della ricorsione passo ricorsivo Lunghezza di una lista (length '(1 2 3 4 ; 4 (length '((1 2 3 (4 5 ; 3 (length ( ; 0 (length 5 ; errore (define (length lista (if (null? lista 0 (+ 1 (length (cdr lista 14

Definizione di Funzioni (iii Appartenenza: (member elemento lista resto della lista con testa elemento #f (member 4 pari ; (4 6 8 (member 1 pari ; #f (member 2 '((1 2 3 (4 5 ; #f (member '(3 4 '(1 2 (3 4 5 ; ((3 4 5 (define (member el lista (if (null? lista #f (if (equal? el (car lista lista (member el (cdr lista 15

Definizione di Funzioni (iv Sostituzione: (subst elem1 elem2 lista (subst 'x 2 '(1 2 3 2 1 ; (1 x 3 x 1 (subst 'x 2 '(1 (2 3 2 1 ; (1 (2 3 x 1 (subst 'x 2 '(1 (2 3 (2 ; (1 (2 3 (2 (subst 'x '(2 3 '(1 (2 3 2 3 ; (1 x 2 3 (subst '(2 3 'x '(x y x y ; ((2 3 y (2 3 y (define (subst x y lista (if (null? lista ( (if (equal? y (car lista (cons x (subst x y (cdr lista (cons (car lista (subst x y (cdr lista 16

Fattorizzazione di Sottoespressioni Identificazione di sottoexpr: (let ((id 1 expr 1 (id 2 expr 2... (id n expr n corpo valutazione della espressione una sola volta (let ((x 2(y 3(+ x y ; valutata 5 (define (subst x y lista (if (null? lista ( (let ((testa (car lista(coda (cdr lista (if (equal? y testa (cons x (subst x y coda (cons testa (subst x y coda espressioni valutate tutte prima dei binding let* binding (id i, expr i realizzato prima della valutazione di expr i+1 (define x 0 (let ((x 2 (y x y ; 0 (let* ((x 2 (y x y ; 2 Regole di scope gerarchiche 17

Forme Funzionali Applicazione universale: (mapcar funzione lista (define (mapcar fun lista (if (null? lista ( (cons (fun (car lista (mapcar fun (cdr lista (define (quadrato x (* x x (mapcar quadrato '(2 3 5 7 9 ; (4 9 25 49 81 (mapcar (lambda (x (* x x '(2 3 5 7 9 ; alternativa 18

Uniformità strutturale di Costruzione di Codice dati codice sfruttata per costruire programmi dinamicamente eval valuta il suo argomento (define (sommatoria numeri (if (null? numeri 0 (+ (car numeri (sommatoria (cdr numeri (define (sommatoria numeri (eval (cons '+ numeri (define lista '(3 4 5 (sommatoria lista (eval '(+ 3 4 5 19

Costruzione di Codice (ii (eval 6 ; 6 (eval (+ 1 2 3 ; 6 (eval '(+ 1 2 3 ; 6 (eval ''(+ 1 2 3 ; (+ 1 2 3 (eval '''(+ 1 2 3 ; (quote(+ 1 2 3 (eval (eval '''(+ 1 2 3 ; (+ 1 2 3 (eval (eval (eval '''(+ 1 2 3 ; 6 (eval (eval ''(+ 1 2 3 ; 6 (eval (eval (eval ''(+ 1 2 3 ; 6 (eval (length '(1 2 3 ; 3 (eval '(length (1 2 3 ; errore (eval '(length '(1 2 3 ; 3 (eval ''(length (1 2 3 ; (length (1 2 3 (eval '''(length (1 2 3 ; (quote (length (1 2 3 (eval ''(length '(1 2 3 ; (length (quote (1 2 3 (eval (eval ''(length (1 2 3 ; errore (eval (eval ''(length '(1 2 3 ; 3 20