1.4 KiB
1.4 KiB
Haskell 18
Exercice 1
- Une fonction récursive est une fonction qui s'auto-référence et qui s'appelle elle-même. C'est utilisé pour décrire des suites mathématiques récursives, ou pour traiter plus généralement des problèmes qui ont une solution inductive simple.
allMin :: Ord a => [a] -> a
allMin [e] = e
allMin (e:s) = min e (allMin s)
- Par exemple lors de l'appel
allMin [1,4,3,7,9,5,8,0,1,3,45,5], Haskell va chercher dans ses pattern un qui corresponde, il trouveallMin e:s, puis remplace parmin 1 (allMin [4,3,7,9,5,8,0,1,3,45,5]). Il continue jusqu'à tomber sur un cas qu'il connait, iciallMin [5].
Exercice 2
a. La factorielle est naturellement définie récursivement pas (n+1)! = (n+1)*n! et 0!=1
b. Cette fonction semble peu naturelle en récursif, bien que ce soit possible (c'est toujours possible), on aurait une fonction au moins aussi compliqué qu'un algo pour la multplication quelconque.
c. Naturellement définie car replicate (n+1) x = x:(replicate n x) et replicate 0 x = []
d. Naturellement définie car sum e::s = e+(sum s) et sum [] = 0
fact :: Num a => Eq a => a -> a
fact 0 = 1
fact n = n*(fact (n-1))
replicate' :: (Num i, Ord i) => i -> a -> [a]
replicate' n x
| n <= 0 = [ ]
| otherwise = x : replicate' (n - 1) x
ssum :: Num a => [a] -> a
ssum [] = 0
ssum (e:s) = e+(ssum s)
Exercice 3
Voir fstfunc.hs