2014-03-02 94 views
1

是否有庫函數可以找到List1 minus elements that appear in List2?我一直在搜索,並沒有發現很多東西。庫函數查找兩個列表之間的差異 - OCaml

它似乎並不瑣碎寫我自己。我寫了一個函數刪除列表中的特定元素,但是這是更簡單:

let rec difference l arg = match l with 
| [] -> [] 
| x :: xs -> 
    if (x = arg) then difference xs arg 
    else x :: difference xs arg;; 
+1

有一組[DIFF ](http://caml.inria.fr/pub/docs/manual-ocaml/libref/Set.S.html),但不保留排序或多樣性。 – user2864740

回答

5

請問這個怎麼辦?

let diff l1 l2 = List.filter (fun x -> not (List.mem x l2)) l1 
+0

這將計算列表的交集。我想,你錯過了「不」。 (這可能是一項任務,所以沒有造成任何傷害。) –

+0

@JeffreyScofield是的,不知道''是破折號,我認爲這是某種指標。編輯我的回答和問題 –

2

我最終什麼事實際上做只是寫另一功能,將調用第一個我張貼

let rec difference l arg = match l with 
    | [] -> [] 
    | x :: xs -> 
     if (x = arg) then difference xs arg 
     else x :: difference xs arg;; 

let rec list_diff l1 l2 = match l2 with 
    | [] -> l1 
    | x :: xs -> list_diff (difference l1 x) xs;; 

雖然我接受的解決辦法是更優雅