CAML light
Meta language
scrivi:# 3;; doppioCAML risponde- : int = 3valore dell'espressione
il nome del*baddeab in valore nessunnome
tipole 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 parameto
funzione funziale
f : int -> int = <fun>
nome chiamata funzione
# f 2;;
# let f (n, m) = n + m + 3;;
# f (3,5);;- : int = 8
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 risultato
f : int -> (int -> int) = <fun>
prodotto cateter valo -> usando variabile= metodo coppia
come 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 -> 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 light
Meta language
scirto:
# 3;; Doppiovalore dell'espressioneun nome che èmodificato unvalore nessunvaloreInferenza dei tipPer 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 corpo
f : int → int = tipizzazioneDefinizione Funzione
NB
- somma tra int
- somma tra float
Il 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 risultato
f : 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
Sono 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/elemento
head 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 valori
X::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 = 3lunghezza di una lista# let rec len l = match l with
[] -> 0x :: xs -> 1 + len (xs);;
Ultimo elementolet 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.