我比较列表的长度,然后比较第一个元素的大小,这样:
(maximumBy (comparing length <> comparing head)) sx
Run Code Online (Sandbox Code Playgroud)
此代码返回最长的列表,如果有多个相同长度的列表,它将返回具有最大第一个元素的列表。
有没有一种简单的方法可以修改它以返回第二个比较以返回具有最小第一个元素的那个?
我正在训练功能性 Haskell 并且无法理解这有什么问题:
maxBy :: (a -> Int) -> a -> a -> a
maxBy measure a b = max (measure a) (measure b)
Run Code Online (Sandbox Code Playgroud)
以下是此 maxBy 函数如何工作的示例:
maxBy (*2) 3 5 ==> 5
maxBy length [1,2,3] [4,5] ==> [1,2,3]
maxBy head [1,2,3] [4,5] ==> [4,5]
Run Code Online (Sandbox Code Playgroud)
错误信息是:
无法将预期类型 'a' 与实际类型 'Int' 匹配 'a' 是一个刚性类型变量,受以下类型签名约束:maxBy :: forall a。(a -> Int) -> a -> a -> a