我正在尝试实施max'
max' :: (Ord a) => [a] -> a
使用foldl
(可悲的是,LYAH似乎没有练习,所以我正在制作它们。)
所以,我可以写一个带有两个整数的lambda并返回最大值:
(\x y -> if x > y then x else y) 2 3
我可以foldl
使用它的列表:
foldl (\x y -> if x > y then x else y) 2 [2, 3, 4, 1]
所以我认为我需要的是:
max' :: (Ord a) => [a] -> a
max' xs = foldl (\x y -> if x > y then x else y) (head xs) (tail xs)
但上述行失败了:
Use foldl1
Found:
foldl (\ x y -> if x > y then x else y) (head xs) (tail xs)
Why Not:
foldl1 (\ x y -> if x > y then x else y) xs
我想问:
在这种情况下有什么问题?
如何从此类消息中找出未来的错误?
答案 0 :(得分:3)
请注意您重新实现maximum
not max,您也可以使用
foldl max (head xs) (tail xs)
Prelude> :info max
class Eq a => Ord a where
...
max :: a -> a -> a
...
-- Defined in `GHC.Classes'
Prelude> :info maximum
maximum :: Ord a => [a] -> a -- Defined in `Data.List'