Haskell - 递归地编写foldr

时间:2015-08-06 21:44:58

标签: haskell recursion

我正在尝试使用递归编写库函数foldr。但是,我遇到了语法错误,并且不确定功能是否正确。这是我的代码:

foldr :: (a -> b) -> [a] -> [b]
foldr f [] = []
foldr f xs = foldr f (init xs) : f (last xs)      

如果我能得到一些帮助,我将不胜感激

1 个答案:

答案 0 :(得分:3)

这不是foldr函数的类型。这是map函数的类型。

但是说,:一个元素连接到列表的前面。您使用它的方式尝试将一个元素连接到列表的 end ,这不起作用。

最接近你的意思 - 仍然是O(n ^ 2)并且效率极低 - 是用

代替最后一行
foldr f xs = foldr f (init xs) ++ [f (last xs)]