Je l'extrait de code de code suivantgarde est ignorée quand il ne doit pas être
module Main where
main :: IO()
main = do
ne <- getLine
c <- getLine
putStrLn $ show $ foo c (words ne)
foo :: String -> [String] -> Integer
foo c (n:e:_) =
foo' (read c::Integer) (read e::Integer) (read n::Integer) [2..]
where foo' c e n (x:xs)
| mod (x^e) n == c = mod x n
| otherwise = foo' c e n xs
qui fonctionne comme prévu, sauf si compte tenu de l'entrée suivante:
9 3
2
Le premier garde est ignorée et une boucle infinie est entrée. La façon dont je vois ceci est que foo'
devrait d'abord être appelé avec 2 9 3
qui se traduirait par mod (2^9) 3 == 2
ce qui est vrai et devrait aboutir à la valeur mod 2 9
mais ce n'est pas le cas.
Je suis sûr que je manque quelque chose trivial ici, mais je ne peux pas le voir ...
Toujours quelque chose de trivial ... Merci! – ezpz