projprog/HSK12.md
2022-01-03 10:10:16 +01:00

49 lines
2.0 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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]]`