Tin*_*ina -1 haskell fold higher-order-functions
该哈斯克尔维基教科书提供了一个
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进一步思考.有人可以帮我吗?
mFoldl1 f (x:xs) = myFoldl1 f x xs
Run Code Online (Sandbox Code Playgroud)
重命名函数时你犯了两个错误:首先你在上面的情况(mFoldl1而不是myFoldl1)的定义中错误拼写了函数名,然后foldl用递归调用替换了原来的调用myFoldl1.
正确的版本是:
myFoldl1 f (x:xs) = foldl f x xs
Run Code Online (Sandbox Code Playgroud)