【发布时间】:2018-04-23 04:21:32
【问题描述】:
f1 [] = 1
f1 (x:xs) = x * f1 xs
f2 [] = 0
f2 (x:xs) = 1 + f2 xs
f3 [] = 0
f3 (x:xs) = x + f3 xs
f4 [] = []
f4 (x:xs) = x ++ f4 xs
这些都有一个共同的行为,我怎样才能准确地识别模式并编写一个高阶函数来捕获它?
【问题讨论】:
-
使用该模式编写一个函数,并为您的案例中不同的所有内容添加一个参数。 (额外提示:使用函数作为参数来处理差异太大的所有内容)
-
这些被称为折叠。
-
查找
foldr和foldl。 -
我们甚至可以进一步概括:这实际上是一个catamorphism。
标签: haskell functional-programming