Обычная ошибка, которую допускают начинающие программисты на Haskell, заключается в том, что они думают, что [x]
- это шаблон, который соответствует списку любой длины.Но [x]
на самом деле является шаблоном, который соответствует списку singleton (список с ровно одним элементом, и этот элемент "связан" с x
).
Если мы хотим иметь возможность обрабатывать пустые списки ([]
) или непустые списки (с длиной больше нуля), мы можем просто написать как шаблон x
, x
будет, чем получить "связаны«к самому списку.Обратите внимание, что мы можем использовать любой идентификатор, который мы хотим.Сопоставление с образцом для списков, конечно, полезно: например, для обработки пустого списка, минусов, списка, содержащего ровно один, два, три, пять и т. Д. Элементов.Но здесь мы только ограничимся и усложним ситуацию.
Чтобы вычислить максимум второго элемента кортежей, мы можем обработать его, сначала сделав пинг map
, который генерирует списокэлементов, каждый второй элемент соответствующего кортежа, и затем мы можем вычислить maximum
этого списка, например:
maxSecond :: Ord a => [(a, a)] -> a
maxSecond xs = maximum (map snd xs)
Мы здесь, таким образом, используем map :: (a -> b) -> [a] -> [b]
функция для применения функции ко всем элементам в списке xs
, это функция snd :: (c, d) -> d
, которая, таким образом, принимает второй элемент 2-tuple, а затем мы вычисляем maximum :: Ord e => [e] -> e
, чтобы получить максимум из этого списка.
Мы также можем использовать (.) :: (b -> c) -> (a -> b) -> a -> c
оператор, и напишите это как:
maxSecond :: Ord a => [(a, a)] -> a
maxSecond = maximum . map snd