簡體   English   中英

如何從函數返回列表?

[英]How to return a list from a function?

我在 Haskell 中有這個函數來獲得完美的數字。 我想返回一個完美數字列表。

perfect :: Int -> []
perfect digit  = [presentNum | presentNum <- [1..digit], isPerfect presentNum]

isPerfect :: Integer -> Bool   --function declaration 
isPerfect n =  n == sum [i | i <- [1..n-1], n `mod` i == 0]

但我遇到了錯誤

  • 期待[]' Expected a type, but更多參數 需要[]' Expected a type, but []' 具有類型 `* -> *'
  • 在類型簽名中: Perfect :: Int -> []

如何正確返回列表?

您必須指定列表元素的類型:

perfect :: Int -> [Int]
                -- ^^^ --

沒有“列表” []類型,只有“整數列表” [Int] 、“字符串列表” [String]等類型。

從技術上講,Haskell 確實允許[]作為類型* -> *類型構造函數(這是錯誤報告的內容),使[]不是類型,而是接受像Int這樣的類型並返回類型[Int] 所以,粗略地說, []是一個從類型到類型的函數,而不是一個類型。

類型簽名錯誤。 如果你返回一個Int列表,那么它應該是[Int] (或[] Int ):

perfect :: Int -> [Int]
perfect digit = [presentNum | presentNum <- [1..digit], isPerfect presentNum]

然而,在這里使用filter :: (a -> Bool) -> [a] -> [a]可能更容易:

perfect :: Int -> [Int]
perfect digit = filter isPerfect [1..digit]

我們可以使用enumFromTo :: Enum a => a -> a -> [a]進行無點實現”

perfect :: Int -> [Int]
perfect = filter isPerfect . enumFromTo 1

暫無
暫無

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

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