我是 Haskell 新手,所以我可能遗漏了一些基本的东西——在这种情况下很抱歉,但我就是不知道下面的代码有什么问题以及为什么它会溢出堆栈。它用于找到可以被 [1..x] 中的所有数字整除的最小数字,这里使用 [1,2](欧拉计划问题 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
而不是第一后卫。在这两种情况下,我在尝试运行它时都会遇到堆栈溢出。我已经通过将所有内容放在 main 中加上另外一个列表理解来解决了这个问题,但我想了解这个有什么问题。谢谢!