Sono un principiante di Haskell quindi potrei mancare qualcosa di base - scuse in quel caso, ma non riesco a scoprire cosa c'è che non va nel seguente codice e perché esso trabocca lo stack. È per trovare il numero più piccolo che sia ugualmente divisibile per tutti i numeri in [1..x], qui usando [1,2] (Project Euler Problem 5 è per [1..20]).Overflow dello stack in codice molto semplice
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
Suppongo che debba stampare "2".
Ho anche provato a utilizzare and [mod x y == 0 | y <- [1..2]] == True = x
invece della prima guardia. In entrambi i casi sto ricevendo un sovraccarico di stack quando provo a farlo. Ho risolto il problema inserendo tutto nella sezione principale più una ulteriore comprensione delle liste, ma mi piacerebbe capire cosa c'è che non va in questo. Grazie!
È possibile omettere '== True'. – Franky