23 lines
2.2 KiB
Markdown
23 lines
2.2 KiB
Markdown
# Haskell 20
|
||
|
||
### Exercice 1
|
||
1. Une fonction curryfiée est une fonction qui ne prend pas le n-uplet de ses n paramètres en guise d'unique paramètre, mais décrit plutot la fonction comme une fonction du premier paramètre renvoyant une fonction des autres paramètres (inductivement).
|
||
2. Les deux résultats suivants sont compris pareil par Haskell: `max 67 5` est l'application à max de 67 puis au résultat de 5.
|
||
`max 67` est une application qui est semblable à l'identité sur les nombres superieurs à 67 et qui est constante à 67 sur les nombres inferieurs à 67.
|
||
3. `max` est du type `a -> a -> a` ce qui signifie `a -> (a -> a)`. La curryfication est visible car la fonction renvoie une fonction qui n'est pas le résultat normalement attendu par la fonction.
|
||
4. La curryfication est semblable à l'utilisation de fonction anonymes car une fonction anonyme qui dépend du contexte est une fonction globale à laquelle on a appliqué le contexte (l'application reste partielle).
|
||
|
||
### Exercice 2
|
||
1. L'expression donnée renvoie la liste des nombres de 1 à 100 privée de ceux qui n'étaient pas strictement superieurs à 10.
|
||
2. Une fonction infixe est une fonction qui s'écrit comme un opérateur, c'est à dire entouré de ses paramètres (par exemple `34 + 8` au lieu de `add 34 8`).
|
||
3. On peut transformer une fonction *infix* en fonction *prefix* en entourant l'opérateurs de parenthèses. Par exemple les expressions `53 - 11` et `(-) 53 11` sont équivalentes.
|
||
4. La section (*sectionning*) est un moyen d'appliquer partiellement des fonctions infixes sans passer par leur version préfixe.
|
||
5. On peut avoir simplement `div20 = (/20)
|
||
6. `any (>5) [1..10]`
|
||
|
||
### Exercice 3
|
||
1. L'expression renvoie la liste des nombres de 1 à 10 auxquels on a pris l'opposé.
|
||
2. Un lambda est un moyen de définir une fonction dans un *scope* réduit et sans lui donner de nom, par exemple en paramètre d'une fonction.
|
||
3. Les lambdas sont déclarés avec la sytaxe suivante: `(\x -> corps)` où `x`est le paramètre de la fonctions et `corps` est le «processus» de la fonction, là valeur retournée pouvant dépendre de `x` (c'est en général préférable).
|
||
4. `map (\(a,b) -> a*10 + (a*b) + b) (zip [1..5] [6..10])`
|