Haskell - 使用foldr的MinMax

All*_*mis 1 haskell

我正在寻找一个Haskell函数,它将一个列表作为参数并返回一个元组(min,max),其中min是列表的最小值,max是最大值.

我已经有了这个:

maxMinFold :: Ord a => [a] -> (a, a)
maxMinFold list = foldr (\x (tailMin, tailMax) -> (min x tailMin) (max x tailMax)) -- missing part
Run Code Online (Sandbox Code Playgroud)

你能帮我解决一下缺失的部分吗?(或者告诉我我做错了什么)

非常感谢

Sim*_*n H 5

你拿起头部,用它作为拳头最小最大,然后折叠在尾巴上.

maxMinFold :: Ord a => [a] -> (a, a)
maxMinFold (x:xs) = foldr (\x (tailMin, tailMax) -> (min x tailMin, max x tailMax)) (x,x) xs
Run Code Online (Sandbox Code Playgroud)

至于你的答案,你的折叠功能没有返回正确的类型.

注意

foldr :: (a -> b **-> b**) -> b -> [a] -> b
Run Code Online (Sandbox Code Playgroud)

特别是你需要返回一个b,这在你的情况下是一个元组

  • `(min x tailMin)(max x tailMax)`不是具有Type的东西,更不用说元组类型了.我在答案中添加了一些内容 (2认同)