我正在尝试使用递归编写库函数foldr。但是,我遇到了语法错误,并且不确定功能是否正确。这是我的代码:
foldr :: (a -> b) -> [a] -> [b]
foldr f [] = []
foldr f xs = foldr f (init xs) : f (last xs)
如果我能得到一些帮助,我将不胜感激
答案 0 :(得分:3)
这不是foldr
函数的类型。这是map
函数的类型。
但是说,:
将一个元素连接到列表的前面。您使用它的方式尝试将一个元素连接到列表的 end ,这不起作用。
最接近你的意思 - 仍然是O(n ^ 2)并且效率极低 - 是用
代替最后一行foldr f xs = foldr f (init xs) ++ [f (last xs)]