1.7 KiB
1.7 KiB
Haskell 16
Exercice 1
letreste à travers l'execution (une définition) alors quewherecrée une définition uniquement valable dans le bloc le précédent.- On ne peut pas utiliser
letdans un pattern matching car aucun pattern ne «correspond» à unlet. - La syntaxe du
letest la suivante:let nomDeVariable = définition. - Les noms sont disponibles avant les signes
=et les définitions sont juste après.
Prelude> let a=2
Prelude> let b=98
Prelude> let c=34
Prelude> let f="Bonjour"
Prelude> let g=" je suis "
Prelude> let h="un let."
Prelude> (a+b+c,f++g++h)
(134,"Bonjour je suis un let.")
Prelude> let pow3 x = x*x*x
Prelude> let t=(pow3 12, pow3 9)
Prelude> t
(1728,729)
Exercice 2
listMeanlet :: [(Double,Double)] -> [Double]
listMeanlet l = [moy x y | d<-l, let (x,y) =d]
where moy u v = (u+v)/2
- Le
letutilise le pattern matching et crée des définitions utilisables uniquement à l'interieur de la liste en compréhension.
listMeanlet2 :: [(Double,Double)] -> [Double]
listMeanlet2 l = [let (x,y) =d in moy x y | d<-l]
where moy u v = (u+v)/2
- Ici, le
letest «à l'interieur» de la liste. Cette liste est comprise par haskell comme la liste deslet (x,y) = d in moy x ypourddansl. Leletcrée une expression plutôt qu'une définition.
listMeanlet3 :: [(Double,Double)] -> [Double]
listMeanlet3 l = [m| d<-l, let (x,y) =d, let m = moy x y, m>=12]
where moy u v = (u+v)/2
- On ne pourrait pas ajouter (simplement) cette condition sans réécrire une décomposition dans
listMeanlet2car les variablesxetyne sont pas définies dans le contexte de la liste.