gpt4 book ai didi

haskell - 根据函数最大化

转载 作者:行者123 更新时间:2023-12-02 05:40:51 24 4
gpt4 key购买 nike

我正在尝试编写一个函数,它接受一个函数和两个输入,并返回使函数最大化的参数。这是我要使用的设置:

max :: Eq a => (a -> Int) -> a -> a -> a 

例如,该函数应按如下方式工作:

maximize (+3) 5 10 = 10

因为 (3+5) < (3+10)

我想我需要做这样的事情:

maximize :: Eq a => (a -> Int) -> a -> a -> a
maximize f x y = max (f x) (f y)

不过这种方法似乎并不奏效。感谢您的帮助!

最佳答案

你的问题是 max (f x) (f y) 返回 f xf y,而不是 x y。您必须比较前一对值,然后返回后者之一。一种方法是使用 compare然后对其结果进行模式匹配,如下所示:

-- You don't actually need the `Eq a` constraint here.
maximize :: (a -> Int) -> a -> a -> a
maximize f x y = case compare (f x) (f y) of
-- etc. (I will let you fill in the details.)

一个写作的快捷方式是使用 comparing来自 Data.Ord,它允许您将 compare (f x) (f y) 替换为 comparing f x y。上面由 user2407038 建议的另一个快捷方式使用 maximumByData.List 将其全部缩减为单行 maximumBy(比较 f)[x,y]

关于haskell - 根据函数最大化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40209169/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com