Say I have two lists:
let a = [1 .. 1000]
let b = [250 .. 500]
How do I get a new list that contains the values {1-249, 501-1000}?
If you want a pure F# solution, your options will vary based on your requirements. If your lists don't contain duplicated items and you don't care about the order of your output, you can just do:
(Set.of_list a) - (Set.of_list b) |> Set.to_list
If you know that your items are sorted, this should work and be efficient:
let exclude =
let rec exclude = function
| [],_ -> []
| a,[] -> a
| (x::xs as l),(y::ys as r) ->
if x < y then x :: (exclude (xs, r))
elif x > y then exclude (l, ys)
else exclude (xs, ys)
fun a b -> exclude (a,b)
If you have two lists which may contain duplicates, aren't necessarily sorted, you want results in the order they occured in a
, and you don't care about performance, you can do:
a |> List.filter (fun x -> not (List.contains x b))