7/16/20151 Haskell: Tipi basici e Definizioni n Tipi Atomici (scalari) n Valori e Identificatori n Overloading n Definizioni e Layout n Definizioni ricorsive:

Slides:



Advertisements
Presentazioni simili
INFORMATICA Altre Istruzioni di I/O
Advertisements

Principale limitazione di AR e SQL-92: interrogazioni ricorsive
1 Automazione dellalgoritmo ricorsivo di permutazione eseguita da Mariano Melchiorri.
INFORMATICA Strutture condizionali
Ricorsione Procedure e funzioni ricorsive. Definizioni Un oggetto si dice ricorsivo se è definito totalmente o parzialmente in termini di sé stesso La.
Procedure e funzioni ricorsive
I DATI I PRINCIPALI TIPI DI DATO UTILIZZATI IN PROGRAMMAZIONE
Linguaggi di programmazione
MATLAB.
MATLAB. Scopo della lezione Programmare in Matlab Funzioni Cicli Operatori relazionali Esercizi vari.
Liste di Interi Esercitazione. Liste Concatenate Tipo di dato utile per memorizzare sequenze di elementi di dimensioni variabile Definizione tipicamente.
Principale limitazione di AR e SQL-92: interrogazioni ricorsive IMPIEGATO NOMENOMECAPO RossiVerdi NeriVerdi DeSio TucciDeSio DeLucaDeSio Lazio selezionare.
Programmazione Procedurale in Linguaggio C++
1 Istruzioni, algoritmi, linguaggi. 2 Algoritmo per il calcolo delle radici reali di unequazione di 2 o grado Data lequazione ax 2 +bx+c=0, quali sono.
Introduzione agli algoritmi. Definizione Sistema di regole e procedure di calcolo ben definite che portano alla soluzione di un problema con un numero.
Semantica Denotazionale
Semantiche dei linguaggi di programmazione
Algoritmi Politecnico di Milano C Primi programmi Politecnico di Milano.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
1 Corso di Informatica (Programmazione) Lezione 10 (12 novembre 2008) Programmazione in Java: espressioni booleane e controllo del flusso (selezione)
Corso di Laurea in Biotecnologie Informatica (Programmazione)
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab m-file m-file script script Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali.
MATLAB.
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Indipendenza lineare,
MATLAB. …oggi… Programmare in Matlab Programmare in Matlab Funzioni Funzioni Cicli Cicli Operatori relazionali Operatori relazionali Esercizi vari Esercizi.
INTRODUZIONE ALLA PROGRAMMAZIONE STRUTTURATA
CORSO DI PROGRAMMAZIONE II
Algoritmi e Strutture Dati Valutazione del tempo di esecuzione degli algoritmi.
Fondamenti di Informatica I a.a Il linguaggio C Il controllo di flusso La selezione condizionale Listruzione switch I cicli Le istruzioni break,
-calcolo Vogliamo studiare le problematiche relative al meccanismo di chiamata di funzione (eg differenze fra binding statico e dinamico) in isolamento.
Semantica Operazionale Strutturata
Procedure e funzioni nei linguaggi di alto livello Lab Programmazione - turno /2006.
Esempi di riuso del codice nei linguaggi di alto livello Lab Programmazione - turno /2006.
mosaic manipola oggetti primitivi (ruota e unisci) regole:
Esercizi FUNZIONI Passaggio di parametri per valore, variabili e tipi locali e globali, prototipo.
Java base I: Sintassi e tipi di dati
DEFINIZIONE DI NUOVE FUNZIONI & STRATEGIE DI COMPOSIZIONE La capacità di definire nuove funzioni permette: di definire nuove operazioni di introdurre variabili.
LAPPROCCIO FUNZIONALE Obiettivo: esprimere la soluzione di un problema sotto forma di funzione. Quali funzioni primitive? Quali meccanismi di combinazione?
AN FI Un denominatoe comune Lo stile funzionale Concetti fondamentali.
Programmazione in Java Claudia Raibulet
In molti casi è utile assegnare a degli identificatori dei valori che restino costanti durante tutto il programma e che non possano essere cambiati nemmeno.
void binario(int n); …………………
Programmazione di Calcolatori
Corso di Programmazione in Java – Esercizio n° 001
Esercizi La distanza di hamming tra due interi x e y si definisce come il numero di posizioni nella rappresentazione binaria di x e y aventi bit differenti.
Attività progettuale in Linguaggi e Modelli Computazionali M
Sintassi: Programma e classi Program::=prog {ClassDeclList {StatList}} ClassDeclList::=ClassDecl ClassDeclList |  ClassDecl::=class Ide c [StaticMetDefList]
1 Un esempio con iteratore: le liste ordinate di interi.
Un interprete astratto per l’inferenza dei tipi
1 Corso di Informatica (Programmazione) Lezione 8 (7 novembre 2008) Programmazione in Java: operatori aritmetici, operatori di assegnamento e cast.
Introduzione a Javascript
Parte 3 Lo stato: variabili, espressioni ed assegnazioni
Informatica B Allievi Elettrici - AA Fondamenti della programmazione in linguaggio C (II) Istruzioni e strutture di controllo.
1 Tipi di Dato §descrittori, tipi, controllo e inferenza dei tipi §specifica (semantica) e implementazione di tipi di dato l implementazioni “sequenziali”
1 Un po’ di ripasso di algebra §necessaria per discutere la semantica denotazionale l e da riprendere quando parleremo di interpretazione astratta §reticoli.
13 ottobre Decisioni F. Bombi 13 ottobre 2002.
1 Il linguaggio C Precisazioni sull’esperienza in laboratorio.
Nucleo di Java: Struttura e Semantica Espressioni Assegnamento Controllo di sequenza Dichiarazioni.
Liste di Interi Esercitazione. Una variante Liste concatenate di Integers Non modificabile Costruttori per creare la lista vuota o un nodo Metodi d’istanza.
Case Study - Un (linguaggio) costrutto tipato: Accedere indirizzi fuori dai bounds di un array Char A[n1..n2]; Int i; … i = e … … A[i] … Sono due interi.
public class volume { public static void main (String[] args) { final double bott_vol =2.0; final double latt_vol = 0.355; int bott_num = 4; int latt_num.
Elementi di semantica denotazionale ed operazionale
La codifica dei numeri.
FI - Algoritmi e Programmazione 1 Variabili Consentono di aumentare notevolmente la potenza espressiva. Una variabile è caratterizzata da:  Un nome 
1 Un esempio con iteratore: le liste ordinate di interi.
Informatica Lezione 3 Psicologia dello sviluppo e dell'educazione (laurea magistrale) Anno accademico:
Lezione 2 : Basi del linguaggio Variabili. Come visto nella lezione 1 le classi registrano il proprio stato nelle variabili  int cadenza = 0;  int velocita.
Basi di Java Strutture base di Java. Basi di java ▪Variabili ▪Operatori ▪Condizioni e Cicli ▪Array.
Haskell: Higher Order Programming
Transcript della presentazione:

7/16/20151 Haskell: Tipi basici e Definizioni n Tipi Atomici (scalari) n Valori e Identificatori n Overloading n Definizioni e Layout n Definizioni ricorsive: Astrazione e Fix Astrazione e FixAstrazione e Fix n Funzioni: operatori infissi, associativi, priorità n Esempi di programmi n Esercizi

7/16/20152 Tipi Atomici n Int –S. (usuale): sequenze di cifre decimali –O.: +, *, -, div, ^, mod, … n Float –S. (usuale): coppie di interi separate da `.` –O.: +, *, -, /, ^, **, abs,… n Char –S. (usuale): `a`, `Z`, `\t`,.., `\n` (ASCII) –Oper.: >,, <,…, ==,…, ord, chr, … n Bool –S.: True, False –O.: ||, &&, not n Operatori Relazionali: T -> T-> Bool

7/16/20153 Valori e Identificatori n Identificatori introducono valori n Quanti diversi usi: n I. di moduli: Capital Letter n I. di classi di tipi: Capital Letter n I. di funzioni, val. funzionali, valori: Lower case n I. di parametri: Lower case

7/16/20154 Overloading n +: Int -> Int -> Int +: Float -> Float -> Float ==: Int -> Int -> Bool ==: Char -> Char -> Bool ==: Int -> Int -> Bool ==: Char -> Char -> Bool n Classi di Tipi

7/16/20155 Definizioni n Definizioni –D. con guardie (equazione condizionale) »Ide x1…xn | g1= e1 … | gk = ek –D. con equazioni: »Ide pattern1,1 … pattern1,n = e1 …. Ide patternk,1 … patternk,n = ek –D. per astrazione »Ide = \x1 -> … \xn -> if b1 then e1 else … else ek

7/16/20156 Esempio f:: Int -> Int -> Int f 0 0 = 0 f 0 y | y == 2= 5 | y == 8 = 12 | otherwise= y f x y = 2*x+(y ^ 4) g:: Int -> Int -> Int g = \x -> \ y -> if (x>=y) then 5 else (f x y) Calcoliamo

7/16/20157 Definizioni: Layout n Cos’è un layout in Haskell –Regione che contiene una definizione –Separa definizioni distinte –Individuato dalle coordinate della prima lettera della definizione f 0 0 = 0 f 0 y | y == 2= 5 | y == 8 = 12 | otherwise = y g:: Int -> Int -> Int n Separatori “grafici” di definizioni: sintatticamente sta per “;” sta per “;”sta per “;”

7/16/20158 Funzioni: Operatori infissi, associatività, priorità n Funzioni come operatori binari –Infix [n] op –Infixl [n] op –Infixr [n] op con [x] = opzionale x, n  [0..9]op = {!,#,+,*,…} + infixr infixr 8 *** +++:: Int -> Int -> Int ***:: Int -> Int -> Int (+++) = (+) (***) = (*)

7/16/20159 Definizioni ricorsive: operatore Fix n Equazioni ricorsive: »Fact = \n -> if n==0 then 1 else n*Fact(n-1) »Fact n = if n==0 then 1 else n*Fact(n-1) –Introducono »Metodologia: definizioni induttive n Fact n = Fact(n-1) * n »Semantica: operatore Fix - minimo punto fisso n Fact = Yf(\f -> \n -> if n==0 then 1 else n*f (n-1)) –(contratta in) Fact = Yf \n -> if n==0 then 1 else n*f (n-1) –min f::N->N (Y Fact) n = Fact(Y Fact) n

7/16/ Esempi di programmi n Modulo Fact.hs Fact.hs »Cinque modi di esprimere il fattoriale »Introduzione ai patterns

7/16/ Esercizi n quoziente, resto divisione intera n Modulo Fib.hs: Fib.hs »GCD »N-esimo di Fibonacci (non lineare) »Combinazioni (n k) q:: Int -> Int -> Int q n m | n<m = 0 | n<m = 0 | otherwise = 1 + q (n-m) m | otherwise = 1 + q (n-m) m r :: Int -> Int -> Int r n m | n<m = n | n<m = n | otherwise = q (n-m) m | otherwise = q (n-m) m

7/16/ Briciole: PR & GR Primitive Ricorsive v.s. Generali Base: zero k, succ, identità k  PR Base: zero k, succ, identità k  PR Derivate: f da g,h  PR Derivate: f da g,h  PR f(0,x 2,…,x n ) = g(x 2,…,x n ) f(x 1 +1,x 2,…,x n ) = h(x 1,f(x 1,x 2,…,x n ),x 2,…,x n ) Base: PR  GR Base: PR  GR Derivate: f da h per  GR Derivate: f da h per  GR f(x 1,x 2,…,x n ) =  y [h(y,x 1,x 2,…,x n )=0] where  y h x 1 x 2 …x n =  y h 0 x 1 x 2 …x n where where  y h y x 1 x 2 …x n  y h y x 1 x 2 …x n | h y x 1 x 2 …x n == 0= y | otherwise=  y h (succ y) x 1 x 2 …x n

7/16/ subtract subtract n m =  y (m+y==n) where (x==x) = 0 (x+1==y+1) = (x==y) (x+1==0) = 1 (0==y+1) = 1