gpt4 book ai didi

haskell - 如何从函数返回列表?

转载 作者:行者123 更新时间:2023-12-02 14:13:14 25 4
gpt4 key购买 nike

我在 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]

但是我遇到了错误

  • Expecting one more argument to []'
    Expected a type, but
    []' has kind `* -> *'
  • In the type signature: perfect :: Int -> []

如何正确返回列表?

最佳答案

您必须指定列表元素的类型:

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

没有“列表”[]类型,只有“整数列表”[Int]、“字符串列表”等类型[String] 等等。

从技术上讲,Haskell 确实允许 [] 作为 * -> * 类型的类型构造函数(这就是错误报告的内容),使得[] 不是一种类型,而是采用诸如 Int 之类的类型并返回类型 [Int] 的东西。因此,粗略地说,[] 是一个从类型到类型的函数,而不是类型。

关于haskell - 如何从函数返回列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60845370/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com