38 lines
1.4 KiB
Markdown
38 lines
1.4 KiB
Markdown
# Haskell 18
|
|
|
|
### Exercice 1
|
|
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.
|
|
2.
|
|
```
|
|
allMin :: Ord a => [a] -> a
|
|
allMin [e] = e
|
|
allMin (e:s) = min e (allMin s)
|
|
```
|
|
3. 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 trouve `allMin e:s`, puis remplace par `min 1 (allMin [4,3,7,9,5,8,0,1,3,45,5])`. Il continue jusqu'à tomber sur un cas qu'il connait, ici `allMin [5]`.
|
|
|
|
### Exercice 2
|
|
1.
|
|
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`
|
|
|
|
2.
|
|
```
|
|
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
|