私は Haskell の初心者なので、基本的なものが欠けている可能性があります。その場合は申し訳ありませんが、次のコードの何が問題なのか、スタックをオーバーフローさせる理由がわかりません。ここでは [1,2] を使用して、[1..x] のすべての数値で割り切れる最小の数値を見つけるためのものです (プロジェクト オイラー問題 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
最初のガード代わりに使ってみました。どちらの場合も、これを実行しようとするとスタック オーバーフローが発生します。すべてをメインに加えてもう 1 つのリスト内包表記にすることで問題を解決しましたが、これの何が問題なのかを理解したいと思います。ありがとう!