У меня есть функция, которая выясняет, является ли определенное значение совершенным числом (суммирует все его факторы, кроме себя, производит себя) и возвращает логическое значение на основе его результата:
isPerfect :: Int -> Bool
isPerfect n = n == sum [i | i <- [1..n-1], n mod i == 0]
IТеперь есть функция, которая пытается использовать результат этой функции в качестве условия, которое, если оно истинно, приводит к тому, что значение помещается в список, а если нет, оно игнорирует это значение.С тех пор, как я начал использовать Haskell 2 дня назад, я очень борюсь с этим (я больше привык к Python).Это моя первая попытка сделать что-то правдоподобное:
isPerfectUpToN :: Int -> [Int]
isPerfectUpToN n = [] insert y
where
y = [1..n] AND isPerfect y == True
Я пробовал много разных поисков в Google, чтобы посмотреть, можно ли создать этот список, используя понимание списка, что-то вроде
[] == [y | y <- [1..n], isPerfect y]
Но эта реализация не сработала.Поскольку я действительно хочу изучать Haskell, может ли кто-нибудь помочь мне (желательно используя только команды, доступные в prelude), чтобы заставить эту условную проверку работать?