我是Haskell的新手,所以我试图理解高阶函数以及它们如何使用map,filter,foldr,foldl,foldr1,foldl1和operator。
首先,我想从一个函数开始,该函数将列表中的元素相乘,并将空列表相乘,返回1.
到目前为止,我有这个,但我不确定下一步该去哪里。
mult :: [Int] -> Int
答案 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。