То, что вы хотите сделать, это не более чем простые операции над множествами пересечение и разница (или относительное дополнение).
F # имеет модуль Set
, чтобы помочь нам здесь. Это должно сделать работу:
let a = [1 .. 10]
let b = [3; 5; 7]
let intersection = Set.intersect (Set.ofList a) (Set.ofList b)
let difference = (Set.ofList a) - (Set.ofList b)
После этого вы, конечно, можете преобразовать результаты в списки, используя Set.toList
, если хотите.
Как указывает Мехрдад, это можно сделать альтернативно, используя LINQ (или даже класс HashSet
в BCL), но подход здесь, по-видимому, больше всего соответствует духу языка F # (безусловно, самый хороший синтаксически, и, вероятно, самый эффективный тоже).