Je suis un débutant dans la programmation haskell. J'ai déjà fais du Java (un ans et demi qu'on en fais dans mes cours) et j'ai décidé d'essayer de refaire les travaux que j'ai fais au début en Java en haskell pour m'entrainer.
J'ai donc ce code:
nbParfait :: Int -> Bool
nbParfait n =
if ((sum . listDiv) n n [1]) == n
then True
else False
listDiv :: Int -> Int -> [Int] -> [Int]
listDiv n1 n2 list
|n2 == 1 = list
|mod n1 n2 == 0 = listDiv n1 (n2-1) (n2:list)
|otherwise = listDiv n1 (n2-1) list
C'est pour vérifier si un nombre est parfait c'est a dire que la somme de ses diviseurs propre donne lui-même. Hors j'ai cette erreur de compilation et je n'arrive pas a trouve rpourquoi.
nbParfait.hs:3:20:
Couldn't match type ‘Int -> [Int] -> [Int]’
with ‘[Int -> [t0] -> Int]’
Expected type: Int -> [Int -> [t0] -> Int]
Actual type: Int -> Int -> [Int] -> [Int]
Probable cause: ‘listDiv’ is applied to too few arguments
In the second argument of ‘(.)’, namely ‘listDiv’
In the expression: sum . listDiv
J'imagine que c'est une erreur stupide du genre une parenthèse mal placé. Mais je n'y arrive pas.
P.S. : Si vous avez des conseils quand à ma façon de résoudre le problème je suis aussi preneur.