处理清单

要处理列表,我们可以简单地对列表类型的构造函数进行模式匹配:

listSum :: [Int] -> Int
listSum []          = 0
listSum (x:xs) = x + listSum xs

我们可以通过指定更复杂的模式来匹配更多值:

sumTwoPer :: [Int] -> Int
sumTwoPer [] = 0
sumTwoPer (x1:x2:xs) = x1 + x2 + sumTwoPer xs
sumTwoPer (x:xs) = x + sumTwoPer xs

请注意,在上面的示例中,我们必须提供更详尽的模式匹配来处理奇数长度列表作为参数给出的情况。

Haskell Prelude 定义了许多用于处理列表的内置函数,如 mapfilter 等。如果可能,你应该使用这些内置而不是编写自己的递归函数。