在Haskell中实现argmax

时间:2016-10-25 15:33:28

标签: python haskell

鉴于列表L和函数f,我想从x返回L项,以最大化f(x)的值

我使用此代码获取2个变量:

argmax f x y = if (f x) > (f y) then x else y

如何将其推广到

argmax f [x,y,z]

(列表中有任意数量的项目)

这就是我在Python中要做的事情:

argmax = lambda f,L: max([(f(x),x) for x in L])[1] if len(L)>0 else None

如何在Haskell中应用相同的逻辑?

1 个答案:

答案 0 :(得分:2)

免责声明 - 我一直在学习Haskell(一般功能范例)一周,所以可能会有更好的解决方案。

import Data.Ord
import Data.List

argmax f l 
    | null l = error "Given list is empty"
    | otherwise = maximumBy (comparing f) l