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

1.4 KiB

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.
allMin :: Ord a => [a] -> a
allMin [e] = e
allMin (e:s) = min e (allMin s)
  1. 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

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