Haskell:函数使用高阶函数乘以列表元素

时间:2015-02-16 23:22:49

标签: haskell

我是Haskell的新手,所以我试图理解高阶函数以及它们如何使用map,filter,foldr,foldl,foldr1,foldl1和operator。

首先,我想从一个函数开始,该函数将列表中的元素相乘,并将空列表相乘,返回1.

到目前为止,我有这个,但我不确定下一步该去哪里。

mult :: [Int] -> Int

2 个答案:

答案 0 :(得分:4)

首先从显式递归开始......这意味着不要使用foldl / foldr和朋友。

让我们从处理空列表的角落情况开始:

mult [] = 1

现在,我们可以通过执行以下操作来对列表的第一个元素执行操作:

mult (x:xs) = x * 3

x是列表的第一个元素,而xs是剩余的列表。因此,这只会将列表中的第一个元素与3相乘。 现在你必须找出要替换3的内容,以便让整个事情做你想做的事情。其余的已经是正确的,如:

mult :: [Int] -> Int
mult [] = 1
mult (x:xs) = x * <this part is missing, recursion maybe?>

答案 1 :(得分:3)

您应该处理空列表的情况:

mult [] = ?

然后,你想做什么?你想基本上拿一个清单:

[1, 2, 3, 4]

在两者之间插入乘法符号:

1 * 2 * 3 * 4

我建议您查看how fold works