2009-10-07 50 views
0

我有下面的代碼片段衛隊被跳過

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 

如預期給出如下輸入的時候,除了其中一期工程:

9 3 
2 

第1保護被跳過的輸入無限循環。 我的看法是, foo'應該首先與2 9 3調用,這將導致mod (2^9) 3 == 2這是真實的,應該導致值mod 2 9,但情況並非如此。

我相信我缺少一些小事在這裏,但我只是不能看到它... ...

回答

1

你有Ëñ以錯誤的方式在富」定義(之前e in foo,但它是相反的富')。所以你沒有傳球2 9 3,你傳球2 3 9.

+0

總是有些微不足道的事......謝謝! – ezpz 2009-10-07 12:08:15

1

foo "2" ["9","3"]將導致foo' 2 3 9 [2..],而不是foo' 2 9 3 [2..]。你的觀點混淆了嗎?