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