Я хочу написать полиморфную функцию, которая вводит два списка и сообщает мне, содержат ли эти два списка общий элемент. Моя попытка написания этой функции выглядит следующим образом:Функция наложения перекрытий
overlaps :: (Eq a) => [a] -> [a] -> Bool
overlaps x:xs y:ys
| x `is_element_of` ys = True
| otherwise = False
где
is_element_of :: (Eq a) => a -> [a] -> Bool
is_element_of e list = case list of
[] -> False
x: xs -> e == x || e `is_element_of` xs
Однако это не работает ... Можно ли шаблон матч против двух списков? Является ли это возможным способом написания этой функции?
Соответствие шаблону не работает, потому что все шаблоны в аргументах функций должны быть в круглых скобках. Кроме того, если вы сопоставляете шаблон во втором списке, как это, вы выбрасываете свой первый элемент, который вам, вероятно, не нужен. – jPlatte
'' 'overlaps xs = any (' elem' xs) '' ' –
упорядочены ли списки? Потому что тогда вы можете повысить производительность. –