[英]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.