簡體   English   中英

為無限列表 Haskell 定義一個函數

[英]Define a function for an infinite list Haskell

我試圖將函數寫得longer :: [a] -> Int -> Bool這決定了提供的列表是否比參數長。 到目前為止,我寫道:

longer :: [a] -> Int -> Bool
hossz (x:xs) = length (x:xs)
hossz [] = 0
longer [] _ = False
longer (x:xs) y | y<0 = error ("negative parameter")
                    | hossz(x:xs)>y = True
                    | otherwise = False

在我為它提供一個無限列表(例如更長的 [1..] 10)之前,這一切都很好,很花哨,它會卡在某種無限循環中,只是沒有完成運行。 所以問題是,是否有一種方法可以定義它,如果它得到一個無限列表,它只會返回 True 而不會嘗試計算整個事情? 先感謝您

length正在嘗試計算列表的長度,對於無限列表,這需要永遠。

不過,您根本不需要計算長度。 您只需要使用較小的整數在尾部遞歸。 當整數達到 0 時,列表要么為空,要么不為空; 多久都沒有關系。

longer :: [a] -> Int -> Bool
longer _ n | n < 0 = True
longer xs 0 = ...
longer [] n = False  -- n > 0
longer (x:xs) n = longer xs (n - 1)

暫無
暫無

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

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