Хаскелл переписывает Мин класс
Я совершенно новичок в Haskell и пишу функцию, которая похожа на min, вместо того, чтобы просто принимать 2 значения, которые он примет 3. Я разработал класс, как показано здесь:
min3 :: a -> a -> a -> a
Однако что бы я добавил к самой функции после записи, сколько входных переменных?
min3 x y z =
Это, наверное, глупо легко, и я что-то упускаю, но если бы вы могли помочь мне, я был бы очень признателен.
Спасибо!
3 ответа
Одна реализация
min3 :: Ord a => a -> a -> a -> a
min3 x y z = min x $ min y z
Заметки:
- В определении типа вы должны написать
Ord a => ...
потому что ваши аргументы должны быть правдоподобными, то естьmin
Функция должна быть определена для них.
@Lee предоставляет бессмысленную реализацию, которая также может быть записана как
импорт данных. Композиция ((.:))
min3 :: Ord a => a -> a -> a -> a
min3 = min .: min
Замечания: f .: g
это ярлык для (f .) . g
который определен в Data.Composition
Вы также можете написать это как:
min3 :: Ord a => a -> a -> a -> a
min3 = ((min .) .) min
Еще одна реализация:
min3 x y z = head $ sort [x,y,z]
И это может быть легко сгенерировано для функции, которая может найти минимум в списке:
minimum = head . sort
Data.List
дает другую реализациюminimum
,