Haskell 从列表到子列表过滤 3 的倍数
Haskell Filter Multiples of 3 from a List to a Sublist
我仍在努力掌握 Haskell 和函数式编程的工作方式,我需要帮助来理解为什么我的函数不起作用。我正在尝试创建一个函数,该函数将整数列表作为参数并过滤 out/returns 一个包含第一个列表中 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
这只是returns一个包含传递给函数的最后一个值的列表,并且仍然是子列表=[]。感谢您提前给我的任何建议。
我认为您需要先从心理上切换到函数式风格。
例如,这是从列表中获取偶数
> 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
我仍在努力掌握 Haskell 和函数式编程的工作方式,我需要帮助来理解为什么我的函数不起作用。我正在尝试创建一个函数,该函数将整数列表作为参数并过滤 out/returns 一个包含第一个列表中 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
这只是returns一个包含传递给函数的最后一个值的列表,并且仍然是子列表=[]。感谢您提前给我的任何建议。
我认为您需要先从心理上切换到函数式风格。
例如,这是从列表中获取偶数
> 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