Я пытаюсь написать функцию, которая принимает функцию и два входа, и возвращает аргумент, который максимизирует функцию. Это настройки я хочу использовать:Максимизация по функции
max :: Eq a => (a -> Int) -> a -> a -> a
Например, функция должна работать следующим образом:
maximize (+3) 5 10 = 10
Потому что (3 + 5) < (3 + 10)
I я думаю, что мне нужно сделать что-то вроде этого:
maximize :: Eq a => (a -> Int) -> a -> a -> a
maximize f x y = max (f x) (f y)
Этот подход, похоже, не работает. Спасибо за любую помощь!
'maximize f x y = maximumBy (сравнение f) [x, y]' – user2407038
Обратите внимание, что ограничение 'Eq a' не делает ничего полезного для вас. Вам не нужно проверять, равны ли аргументы, все, что вам нужно сравнить, это результаты, поэтому вы можете также опустить это ограничение. Тем не менее, вы можете сделать это также полиморфным в функции _result_, и тогда вам понадобится такое ограничение - но 'Eq' недостаточно, вам понадобится' Ord b => (a -> b) -> a -> a -> a'. – leftaroundabout
Где мы находимся по этому вопросу? вы получили ответ? –