我再次需要你帮助Haskell。案例是我如何使用列表生成器来定义哪些数字是“完美数字”(ei:完美数字:6其除数= 3,2,1&lt; - 它们的总和也是6)。我已经弄清楚如何写出除数:[m | n < - [1..5],m < - [1..n / 2],mod n m == 0]。 但是我怎样才能将除数与每个数字相加,哪里可以说明只有当总和与原始数字相等时才能写出除数。我想知道我可以在oroginal one或类似的东西中使用第二个列表生成器,但我不知道它在Haskell中是如何工作的以及它的syntaxt是什么。
有人可以帮助我吗?
答案 0 :(得分:1)
我建议你先尝试解决原子问题,即一个数字是否完美。然后你可以尝试一个数字列表。假设你有一个正确的除数函数,你可以写
perfect :: Int -> Bool
perfect n = n == sum (divisors n)
一旦配备此功能,您可以将其映射到任何范围,例如
map perfect [1..100]
应该为6和28返回True。
你的除数函数可以写成
divisors :: Int -> [Int]
divisors k = [m | m <- [1 .. div k 2], mod k m == 0]