鉴于列表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
中应用相同的逻辑?
答案 0 :(得分:2)
免责声明 - 我一直在学习Haskell(一般功能范例)一周,所以可能会有更好的解决方案。
import Data.Ord
import Data.List
argmax f l
| null l = error "Given list is empty"
| otherwise = maximumBy (comparing f) l