Хаскелл переписывает Мин класс

Я совершенно новичок в 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,

Другие вопросы по тегам