49 lines
2.0 KiB
Markdown
49 lines
2.0 KiB
Markdown
# Haskell 12
|
||
|
||
### Exercice 1
|
||
1. Cela renvoie les 10 première éléments de la suite (infinie) arithmétique de premiers termes 4 puis 8.
|
||
2. Cela renvoie la liste des entiers de 1 à 10 multipliés par 4 (aussi appelée table de 4).
|
||
3. Dans la commande précédente, `x <- [1..10]` signifie «pour x prenant les valeurs de la liste `[1..10]`.
|
||
4. La partie à gauche est la fonction à appliquer afin d'obtenir le résultat.
|
||
5. Dans cet exemple, la partie a gauche signifie «multiplier chaque élément de la liste par 4».
|
||
6. Cette liste est donc le multiplié par 4 de chaque élément de la liste `[1..10]`.
|
||
|
||
### Exercice 2
|
||
1. On obtient la liste `[20,24,28,32,36,40]`.
|
||
2. La virgule signifie «tel que». La partie à gauche est une expression booléene formant un filtre sur les valeurs de la liste.
|
||
3. On peut ajouter le prédicat `x/=6` donant l'expression `[x*4 | x <- [1..10],x*4 > 16,x/=4]`.
|
||
|
||
### Exercice 3
|
||
1. On obtient la liste `[999,999,999,999,666,666,666,666,666,666]`.
|
||
2. En effet pour chaque élément de la liste `[1..10]`, si son quadruple est plus grand strictement que 16 (donc si le nombre est strictement plus grand que 4), alors afficher 666 sinon afficher 999.
|
||
3. Les prédicats peuvent seulement limiter le nombre d'éléments en sortie, ce qui ne nous permet pas d'avoir les 10 éléments demandés.
|
||
|
||
### Exercice 4
|
||
`[x | x <- [1..35], mod x 2 /= 0]`
|
||
|
||
### Exercice 5
|
||
```
|
||
okko :: [Int] -> [[Char]]
|
||
okko xs = [if x<10 then "OK" else "KO" | x <- xs]
|
||
```
|
||
### Exercice 6
|
||
```
|
||
addList :: [Int] -> [Int] -> [Int]
|
||
addList xs ys = [x+y | x <- xs, y <- ys]
|
||
```
|
||
Exemple:
|
||
```
|
||
addList [1..5] [10,20..50]
|
||
[11,21,31,41,51,12,22,32,42,52,13,23,33,43,53,14,24,34,44,54,15,25,35,45,55]
|
||
```
|
||
### Exercice 7
|
||
Avec comme en-tête de fichier `{-# LANGUAGE ParallelListComp #-}`
|
||
```
|
||
length2 :: [a] -> Int
|
||
length2 xs = last [n | _ <- xs | n <- [2,4..]]
|
||
```
|
||
Le symbole `_` signifie que l'on utilisera pas la valeur que cette variable prendra.
|
||
|
||
### Exercice 8
|
||
`[[x | x <- [1..10] , (mod x 2) == i] | i <- [0,1]]`
|