小编Tin*_*ina的帖子

正确实现foldl1

哈斯克尔维基教科书提供了一个

foldl1           :: (a -> a -> a) -> [a] -> a
foldl1 f (x:xs)  =  foldl f x xs
foldl1 _ []      =  error "Prelude.foldl1: empty list"
Run Code Online (Sandbox Code Playgroud)

那不起作用.我试着编译它的这个版本:

myFoldl1           :: (a -> a -> a) -> [a] -> a
mFoldl1 f (x:xs)  =  myFoldl1 f x xs
myFoldl1 _ []      =  error "Prelude.foldl1: empty list
Run Code Online (Sandbox Code Playgroud)

我首先想到的是缺少一个结束折叠的案例,并且输入有问题

foldl1 _ [x] = x
foldl1 f (x:xs)  =  foldl (f x) xs
Run Code Online (Sandbox Code Playgroud)

但这也不会奏效.我认为类型问题更深入,但我没有足够的把握Haskell进一步思考.有人可以帮我吗?

haskell fold higher-order-functions

-1
推荐指数
1
解决办法
902
查看次数

标签 统计

fold ×1

haskell ×1

higher-order-functions ×1