La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

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:

Presentazioni simili


Presentazione sul tema: "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:"— Transcript della presentazione:

1 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

2 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

3 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

4 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

5 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

6 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 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 “;”

8 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 (+++) = (+) (***) = (*)

9 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

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

11 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 Int -> Int r n m | n

12 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

13 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


Scaricare ppt "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:"

Presentazioni simili


Annunci Google