У меня есть две функции, которые должны работать с двумя списками.
unionB :: Eq a => [a] -> [a] -> [a]
intersectB :: Eq a => [a] -> [a] -> [a]
Для unionB
У меня есть следующий код, который принимает объединение двух списков, которое делает это без использования явной рекурсии.
unionB :: Eq a => [a] -> [a] -> [a]
unionB xs ys = [xs] ++ [[y] | y <- ys]
Для intersectB
У меня есть следующий код, который будет принимать пересечение двух списков (взять минимальное количество отсчетов).Единственная проблема заключается в том, что я делаю это с явной рекурсией.Код ниже:
intersectB :: Eq a => [a] -> [a] -> [a]
intersectB (x:xs) list
| x `elem` list = x : intersectB xs list
| otherwise = intersectB xs list
Есть ли способ использовать структуру моей intersectB
функции, кроме как без использования явной рекурсии?(т.е. не упоминая intersectB
в своем теле?)
Насколько я понимаю, intersectB
должен быть противоположностью тому, что делает unionB
.Я предполагаю, что intersectB
будет выглядеть очень похоже на то, как выглядит unionB
.
Я не могу использовать любой импорт.Я понимаю, что есть импорт, который уже делает это.
Спасибо.