是否有一个Haskell相当于Scala的Iterable.maxBy?

时间:2014-08-11 05:19:18

标签: scala haskell

Scala的IterablemaxBy

  

查找产生函数f测量的最大值的第一个元素。

def maxBy[B](f: (A) ⇒ B)(implicit cmp: Ordering[B]): A

示例:

scala> Seq(-2, 1).maxBy(Math.abs)
res0: Int = -2

scala> Seq(-2, 3).maxBy(Math.abs)
res1: Int = 3

Haskell的等效方法是什么?

2 个答案:

答案 0 :(得分:21)

Scala的Iterable与Haskell的Traversable有关。但是,在这种情况下,Foldable足以找到给定集合的最大值,因此请将maximumBy from Data.Foldablecompare `on` fon中的Data.Function一起使用)或comparing f(来自comparing的{​​{1}}):

Data.Ord

答案 1 :(得分:7)

使用 Data.List.maximumByData.Ord.comparing

comparing :: Ord a => (b -> a) -> b -> b -> Ordering

maximumBy :: (a -> a -> Ordering) -> [a] -> a

示例:

> import Data.Ord (comparing)
> import Data.List (maximumBy)

> maximumBy (comparing abs) [-2, 1]
-2

> maximumBy (comparing abs) [-2, 3]
3