【发布时间】:2018-09-26 15:30:50
【问题描述】:
我有一个函数可以判断某个值是否是完美数(将除自身之外的所有因子相加,产生自身)并根据其结果返回布尔值:
isPerfect :: Int -> Bool
isPerfect n = n == sum [i | i <- [1..n-1], n mod i == 0]
我现在有一个函数,它试图将此函数的结果用作条件,如果为真,则将一个值放入列表中,如果不是,则忽略该值。自从我 2 天前开始使用 Haskell 以来,我一直在为此苦苦挣扎(我更习惯于 Python)。这是我第一次尝试看似合理的事情:
isPerfectUpToN :: Int -> [Int]
isPerfectUpToN n = [] insert y
where
y = [1..n] AND isPerfect y == True
我已经尝试了许多不同的谷歌搜索,看看是否可以使用列表理解来创建这个列表,类似于
[] == [y | y <- [1..n], isPerfect y]
但是这个实现不起作用。由于我确实想学习 Haskell,有人可以帮助我(最好只使用前奏中可用的命令)让这个条件检查起作用吗?
【问题讨论】:
标签: list function haskell conditional-statements list-comprehension