的Haskell Wikibook提供一个正确实施foldl1
foldl1 :: (a -> a -> a) -> [a] -> a
foldl1 f (x:xs) = foldl f x xs
foldl1 _ [] = error "Prelude.foldl1: empty list"
是不工作。我试图编译这个版本是:
myFoldl1 :: (a -> a -> a) -> [a] -> a
mFoldl1 f (x:xs) = myFoldl1 f x xs
myFoldl1 _ [] = error "Prelude.foldl1: empty list
我起初以为是失踪的情况下,结束折,并且有一个与输入
foldl1 _ [x] = x
foldl1 f (x:xs) = foldl (f x) xs
一个问题,但是这不会工作,无论是。我认为类型问题更深入,但我对Haskell没有足够的把握来进一步思考。有人可以帮我吗?
定义“不起作用”。你是否遇到编译错误或运行时错误,或者它只是无法终止?您提供的代码在我的GHC上工作得非常好。 –
与myFoldl1我得到一个编译错误“类型错误 - 统一会给infinte类型” – Tina
嗯......这很奇怪。这是完整的错误信息吗?如果是这样,你使用的是哪种编译器? –