저는 하스켈 초보자입니다. 그래서 뭔가 기본적인 것을 놓칠 수 있습니다 -이 경우 사과하지만, 다음 코드가 잘못된 이유와 왜 스택 오버플로인지 알 수 없습니다. 그것은 [1..x]의 모든 숫자로 똑같이 나눌 수있는 최소 수를 찾는 것입니다. 여기서 [1,2]를 사용합니다 (Project Euler 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