Avertissement : Je suis nouveau en Haskell et je ne me souviens pas de beaucoup de choses sur la FP à l'université, donc il peut y avoir plus d'une ou deux erreurs dans mon code. C'est aussi mon code pour le problème d'Euler 3.
J'essaie d'appeler récursivement une fonction avec deux tableaux comme arguments et un tableau comme résultat.
Le but :
- supposez que n est égal à 10 pour cette question
- créer une liste de tous les nombres naturels de 1 à n (la variable 'allNumbers' est le code)
- créer une autre liste de tous les nombres naturels de 1 à n (la variable 'allFactors' est le code)
- prendre le premier élément de 'allFactors' et multiplier le reste des nombres de 'allFactors' par ce nombre. (cela génère un tableau de nombres)
- supprimez tous ces numéros de 'allNumbers'.
- continuer de 1 à n jusqu'à ce que 'allFactors' soit vide.
Voici mon code :
mkList :: Int -> [Int]
mkList n = [1..n-1]
modArray :: Int -> Int -> [Int]
modArray a b = [ x*b | x <- [1..a], x `mod` b == 0]
modArrayAll :: [Int] -> [Int] -> [Int]
modArrayAll [] [] = []
modArrayAll (x:xs) (y:ys) = (e)
where
m = head( ys)
n = length( xs)
e = (modArrayAll xs ys ) \\ modArray n m
(en principal)
let allNumbers = mkList (first + 1)
let allFactors = mkList (first + 1)
let mainList2 = modArrayAll allNumbers allFactors
Le résultat est une liste nulle. Cependant, si j'ai :
e = xs \\ modArray n m --WORKS for one iteration
J'obtiens tous les nombres impairs de 1 à 10.
Ma question : Pourquoi cela ne fonctionne-t-il pas comme je l'attends ? Je m'attendrais à ce que la pile récursive rencontre la condition de tableau vide et renvoie simplement un tableau vide qui ne serait pas retiré du tableau appelant et qu'elle continue à renvoyer uniquement les nombres premiers ?