Мне нужно реализовать метод для возврата общих элементов в двух списках как часть задачи присваивания:
Моя идея заключалась в том, чтобы удалить дубликаты в обоих списках, объединить их и вернуть элементы, которые повторяются в результирующем списке. Я хочу определить булеву функцию, которая проверяет для каждого элемента в списке, если они появляются более одного раза. Моя идея состояла в том, чтобы использовать List.fold_left с конкретным элементом b в списке и использовать acc для отслеживания того, сколько раз он появляется в списке. Тем не менее, у меня есть ошибка здесь:
У меня есть еще одна идея, которая заключается в том, чтобы сначала отсортировать списки, но список может быть любого типа, следовательно, сравнение должно быть реализовано и для новых типов. Или я могу просто использовать <для сравнения значений любого типа? </p>
Вот коды, которые у меня есть.
let rec remove (b : 'a) (l : 'a list)=
match l with
| [] -> []
| w::e -> if w=b then remove b e
else w::(remove b e)
let rec removeduplicates (l:'a list)=
match l with
| [] -> []
| w::e -> w::(removeduplicates(remove w e))
let removeduppair (l : 'a list * 'a list)=
let (l1,l2) = l in
(removeduplicates l1, removeduplicates l2)