projprog/HSK20.md
2022-01-07 20:18:26 +01:00

2.2 KiB

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)xest 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])