我仍在尝试掌握Haskell和Functional Programming的工作方式,我需要帮助理解为什么我的函数不起作用。我正在尝试创建一个函数,该函数将整数列表作为参数,并过滤掉/返回一个子列表,该子列表包含第一个列表中的任何3的倍数。这是我的代码:
module Main where
sublist = []
myFunc :: [Int] -> [Int]
myFunc [] = []
myFunc [t] = do
if t `mod` 3 == 0
then t : sublist
else myFunc []
myFunc (h:t) = do
if h `mod` 3 /= 0
then myFunc t
else do
h : sublist
myFunc t
这只返回一个包含传递给函数的最后一个值的列表,仍然是sublist = []。感谢您提前给我的任何建议。
答案 0 :(得分:2)
我认为你需要先从心理上切换到功能风格。
例如,这是从列表中获取偶数
> filter even [1..10]
[2,4,6,8,10]
不使用现有功能,您可以实现相同的功能
filter' :: (a -> Bool) -> [a] -> [a]
filter' _ [] = []
filter' condition (x:xs) = if condition x
then x : filter' condition xs
else filter' condition xs
divisibleBy3 n = mod n 3 == 0
现在,您的程序可以写成
filter' divisibleBy3 inputList