簡體   English   中英

堆棧溢出非常簡單的代碼

[英]Stack overflow in very simple code

我是一個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 xy == 0 | y <- [1..2]] == True = x and [mod xy == 0 | y <- [1..2]] == True = x而不是第一個后衛。 在這兩種情況下,我在嘗試運行時都會出現堆棧溢出。 我已經解決了這個問題,把所有東西放在主要加上一個列表理解,但我想知道這個有什么問題。 謝謝!

問題(或者至少是一個問題 - 我還沒有檢查過其他問題)就在這一行:

| otherwise = func x+1

你打算這樣做

| otherwise = func (x+1)

但它被解析為

| otherwise = (func x)+1

功能應用程序的優先級高於任何運算符。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM