CAML lightMeta languagescrivi
# 3;; doppio
CAML risponde- : int = 3
valore dell'espressione
il nome del*baddeab in valore nessunnometipole instobelodeterminato dopoaver fatto usointerlerenza del tipo
Per associare un nome ad un valore si usa l'espressione let
# let n = 3+7;; n : int = 10
# let f n = n+1;;nome parametofunzione funzialef : int -> int = <fun>nome chiamata funzione
# f 2;;
# let f (n, m) = n + m + 3;;
# f (3,5);;- : int = 8
Funzioni Curries
Funzioni Curries (argomenti in sequenza)
# let f n m = n m + 3;; la funziona prende il primo argomento (n)e restituisce una funzione che prendeun argomento m e dà il risultatof : int -> (int -> int) = <fun>prodotto cateter valo -> usando variabile= metodo coppiacome trasformare una funzione nella versione dipped
# let t (n, m) = 2*m + n;;t : int*int -> int = <fun>
# let s f m = f (n, m);; s : int -> int -> int = <fun>
Funzioni polimofche
Funzioni polimofche -> possono essere applicate a qualsiasi--tipo--
# let f (n, m) = n f; l ; a -> a = <fun>
# f “abc” ;; - : string -> “abc”
# let f (n, m) = (n, m);; f : l*l+l
# f (3 ; 4.5);; ;; = int -> float = <fun>
CAML lightMeta languagescirto
# 3;; Doppio
valore dell'espressione
un nome che èmodificato unvalore nessunvaloreInferenza dei tip
Per associare un nome ad un valore si usa l'espressione let
# let n = 3 + 7;; n : int = 10
# let f n = n + n;;nuovo parametron nuovonel corpof : int → int = tipizzazioneDefinizione FunzioneNBsomma tra intsomma tra floatIl prodotto scalareteorema della sodoarbjecti
Funzione Complessa
# let f n m = n int m + 3;;la parte sinistra (m)e l'esercizio una funzione che prendeun argomento m e da il risultatof : int → (int → int) = anomenafunziotua a suplicfacosì f ib prodocadenain
# let t (n, m) = 2 * m + n;;t : int×int int = Funzioni polimorfe → possono essere applicate su qualsiasi tipo
# let f n m = mf : ('a 'b) → 'b = # f "abc" ;; string "abc"
# let f (n,m) = (n,m)f : 'a * 'b = # let g (n,m) = (n,m+1); # g (3,4.5);
Espressione Condizionale
if E then E1 else E2
T stesso tipo
# let REC f n = i - if n=ø then ø else 2+f(n-1);;f: int → int = fun
Liste
ListeSono strutture omogenee
Def: # [10,-3,4]; ∷ int list = [...][ ] lista vuota[ ], ... b ] ∷ [...]∷[ ]X ... :: xs(3; 4) :: [] = [(3; 4)]
# (let g n=n+1;); g ∷ int→int = fun total HD minore/nessun/elementohead hd: ∷ ’b list→’b list
# (let g n=n+1;)NB let n=n+1;
Definire una funzione che restituisca l'ultimo elemento di una lista
# let rec last l = if l=[] then hd l else last (tl l);;
es:s = [3;4] -> 4 : int
Rimuovere l'ultimo elemento di lista
# let rec rimuovelast l = if tl l = [] then [] else hd l ::rimuovelast (tl l);; rimuovelast [3;4] -> [3]
rimuovelast [3;4;5] -> [3;4];; rimuovelast [4;5;0] -> [3;4];; []
Lunghezza di una lista
let rec len l = if l = [] then 0 else 1 + (len (tl l));;len : 'a list -> int = Pattern (modello) è una espressione che contiene variabili (non che possono essere istanziate a valori)
es x:=[][5] -> 5: []
Si possonoriconoscerepattern possono essere confrontati a valori instanziandole variabili a valoriX::y::xs pineocordi:ocale dovea quali teti sitoconcomparare?
- 3 : [] no!
- 4 tuttelele in zezione[] no!
- 2: 3 : [] si!
- 2: 34:3:[] si!
- x y ys
# match [3;4] with[] -> 0x::xs -> x;- : int = 3
Lunghezza di una lista
# let rec len l = match l with[] -> 0x :: xs -> 1 + len (xs);;
Ultimo elemento
let rec last l = match l with[x] -> xx::xs -> last xs;;
Pattern Matching
# match l withpattern1 ->| pattern2 -> ...
Si cerca di un valore dell'espressione con i pattern in sequenza.
x::y::xs -> last (y::ys);;
Decontol Pattern Multivalenteesclusivo(es: volglio che possoessere ugualato solo proupattern)
es x: x::xsnon sono multivalente esclusivo.
Operatore di concatenazione @ in Haskell
# [3; 4] ⊙ [5; 6] ;;- :[3; 4; 5; 6]
Proprietà
- □⊙E ⊙ e = ⊙□⊙E =
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.