Tu as définis la fonction avec maListe a [b] ce qui signifie que le second argument va "matcher" avec un objet de la forme [b] : c'est à dire une liste à UN SEUL élément. Ta fonction ne marchera pas pour les listes dont la structure est [] (liste vide) ou x:x':xs (liste à au moins deux éléments).
Exemple :
f [] = 0
f [x] = 1
f (_:xs) = 2
Selon la liste que tu passes en paramètre de la fonction f (qui représente une seule fonction) le retour sera différent selon la structure de la liste passée en paramètre. C'est le pattern-matching.
Si tu veux une liste générale sans te soucier de sa structure il faudrait un identificateur plus général.
Exemple :
f l = 3
Autres exemples de pattern-matching :
not True = False
not False = True
and True True = True
and _ _ = False
PS : Je suppose que tu cherchais à spécifier que le second argument est une liste mais Haskell (et la plupart des autres langages fonctionnels comme OCaml) peuvent déduire le type selon l'utilisation des objets par la fonction. Si tu veux spécifier pour toi même le type des fonctions tu peux utiliser des annotations de types. Par exemple : addition_int :: Int -> Int -> Int à placer au dessus des définitions de fonctions. Cela sert aussi à s'assurer qu'une fonction a le type qu'on souhaite.
Message édité le 11 février 2017 à 13:52:35 par Pseudo supprimé