我是一個Haskell新手,所以我可能會缺少一些基本的東西 - 在這種情況下,道歉,但我只是無法找出以下代碼有什麼問題以及爲什麼它溢出堆棧。它用於找出[1..x]中所有數字可等分的最小數字,這裏使用[1,2](歐拉項目爲Problem 5爲[1..20])。堆棧溢出非常簡單的代碼
module Main where
main::IO()
main = do
putStrLn $ show s where s = func 1
func :: Int -> Int
func x
| foldr1 (&&) [x `mod` y == 0 | y <- [1..2]] == True = x
| otherwise = func x+1
我想應該打印出'2'。
我也試過用and [mod x y == 0 | y <- [1..2]] == True = x
代替第一個後衛。在這兩種情況下,我都會在嘗試運行時遇到堆棧溢出。 我已經解決了這個問題,將所有東西都放在主要的位置上,再加上一個列表理解,但我想了解這個問題。謝謝!
您可以省略'== True'。 – Franky