2015-03-03 4 views
-2

Удалить подмножество в список списков, например: данный ls имеет тип int list list, результат ls является result функция: int list list -> int list listУдалить подмножество в множестве

ls: [[1;2;3;4];[1;2];[1;2;3];[0]] 

результат ls является: [[1;2;3;4];[0]]

у меня есть:

module Int_set = Set.Make (struct 
           type t = int 
           let compare = compare 
          end) 

let set_of_list = List.fold_left (fun acc x -> 
            Int_set.add x acc) Int_set.empty 

let result ls = 
    match ls with 
    | [] -> print_string "nothing\n" 
    | l1 :: ls' -> 
    List.iter 
     (fun l2 -> 
     let s1 = set_of_list l1 in 
     let s2 = set_of_list l2 in 
     if Int_set.subset s1 s2 
     then 
      (*remove s1*) 
     ..... 
     ) ls' 

Не могли бы вы помочь мне фигуру как написать функцию удаления?

+0

Я хочу, чтобы удалить все подмножества внутри набора. Разве это не ясно? – Quyen

+0

Рекурсивно? Независимо от порядка появления в списке? – PatJ

+0

Я решил проблему. Извините, что вы смутили. – Quyen

ответ

0

Вы можете просто использовать Int_Set.diff.

+1

Не могли бы вы привести мне пример? Я все еще не понимаю, почему я могу использовать эту функцию? – Quyen

0

Я привел пример со структурой данных List, которая дала мне результат, который я хотел.

Вот код:

let map_filter l1 ls = List.map (List.filter (fun x -> List.mem x l1))ls 

let result_filter ls = 
    match ls with 
    | [] -> [] 
    | l1 :: ls' -> map_filter l1 ls' 

let result ls = 
    let ls' = result_filter ls in 
    List.filter (fun l -> not (List.mem l ls')) ls 
Смежные вопросы