2.2 KiB
2.2 KiB
Haskell 20
Exercice 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).
- Les deux résultats suivants sont compris pareil par Haskell:
max 67 5est l'application à max de 67 puis au résultat de 5.max 67est une application qui est semblable à l'identité sur les nombres superieurs à 67 et qui est constante à 67 sur les nombres inferieurs à 67. maxest du typea -> a -> ace qui signifiea -> (a -> a). La curryfication est visible car la fonction renvoie une fonction qui n'est pas le résultat normalement attendu par la fonction.- 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
- L'expression donnée renvoie la liste des nombres de 1 à 100 privée de ceux qui n'étaient pas strictement superieurs à 10.
- Une fonction infixe est une fonction qui s'écrit comme un opérateur, c'est à dire entouré de ses paramètres (par exemple
34 + 8au lieu deadd 34 8). - On peut transformer une fonction infix en fonction prefix en entourant l'opérateurs de parenthèses. Par exemple les expressions
53 - 11et(-) 53 11sont équivalentes. - La section (sectionning) est un moyen d'appliquer partiellement des fonctions infixes sans passer par leur version préfixe.
- On peut avoir simplement `div20 = (/20)
any (>5) [1..10]
Exercice 3
- L'expression renvoie la liste des nombres de 1 à 10 auxquels on a pris l'opposé.
- 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.
- Les lambdas sont déclarés avec la sytaxe suivante:
(\x -> corps)oùxest le paramètre de la fonctions etcorpsest le «processus» de la fonction, là valeur retournée pouvant dépendre dex(c'est en général préférable). map (\(a,b) -> a*10 + (a*b) + b) (zip [1..5] [6..10])