我正在尝试编写一个单行函数,您可以在其中输入一个数字和一个列表,然后它返回最高值。
例如:
Input: getMax 5 [1,4,7]
Output: 7
这是我当前的代码:
getMax :: (Ord a) => a -> [a] -> a
getMax f xs = foldr max f xs
现在我想扩展我的函数,以便我可以输入要比较的 Lambda 函数而不是数字。
例如:
Input: getMax (\x -> mod x 5) [1,4,7]
Output: 4
但我无法让它发挥作用。
我收到一条错误消息:
No instance for (Show (Integer -> Integer))
我不太明白。
我尝试更改类型签名,但这没有帮助。
提前致谢!
Your foldr
函数应该与f
,然后选择两项中的一项x₁
or x₂
基于是否f x₁
小于或等于f x₂
, so:
getMax :: Ord b => (a -> b) -> [a] -> a
getMax f xs = foldr1 g xs
where g x₁ x₂
| … = …
| otherwise = …
我离开的地方实施…
部分作为练习。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)