Bases de haskell
-- Fichier fonctions.hs
= n*n
carre n
-- | f(0) = 0
-- | f(n) = n + f(n-1)
0 = 0
f = n + f (n-1)
f n
= do
main putStrLn (show (carre 3))
putStrLn (show (f 5))
Interpréter avec la ligne de commande
ghci fonctions.hs
, puis, tester les fonctions :GHCi, version 8.8.4: https://www.haskell.org/ghc/ :? for help [1 of 1] Compiling Main ( fonctions.hs, interpreted ) Ok, one module loaded. *Main> carre 4 16 *Main> :t carre carre :: Num a => a -> a *Main>
*Main>
est le prompt. Il me dit donc quecarre 4
vaut 16.:t
permet de connaître le type d’un élément. La fonction carré est de typea -> a
où esta
doit être un type numérique.Ou compiler avec la ligne de commande
ghc fonctions.hs
, puis exécuter avec la ligne./fonctions
. Il va exécuter les instructions dans lemain
.
Note : Dans ghci
, le i veut dire interactif, c’est un interpréteur similaire à celui de lua.
Note : Si on n’a pas ghc installé, on peut utiliser https://replit.com/languages/haskell.
Exercices
Écrire la fonction puissance.
En utilisant puissance, écrire la fonction exponentielle binaire (n \mapsto 2^n)
Écrire la fonction factorielle.
Écrire la fonction sommielle.
Écrire une fonction qui calcule le n-ième terme de la suite de Fibonacci.
- La tester sur l’entrée 30 (on devrait trouver 832040)
- La tester sur les valeurs suivantes. Mesurer le temps utilisé.
- Réfléchir à une version plus efficace.
Écrire des fonctions
pair
etimpair
qui testent si un nombre est pair ou impair.Écrire une fonction
combinaison
qui calcule les combinaisons de k éléments parmi n en utilisant une identité connue du triangle de Pascal.Écrire la fonction d’Ackermann.
\left\{ \begin{array}{l} A(0, n) = n+1\\ A(m, 0) = A(m-1, 1)\\ A(m,n) = A(m-1, A(m, n-1))\end{array}\right.
- La tester sur l’entrée (3,0)
- La tester sur l’entrée (3,6)
- La tester sur l’entrée (3,7)
- La tester sur l’entrée (4,0)
- La tester sur l’entrée (4,1)