如何编写一个函数,以返回OCaml中给定集合中具有k个元素的所有子集?

时间:2018-10-27 07:16:03

标签: ocaml

问题说:

编写一个函数,该函数返回给定集合中具有k个元素的所有子集。

我设法编写了代码以从集合中提取所有子集:

module Int = struct
  type t = int
  let compare = compare
end
module IS = Set.Make(Int)
module IIS = Set.Make(IS)
let addelement e ps = IIS.fold (fun s r -> IIS.add (IS.add e s) r) ps ps;;
let powset s = IS.fold addelement s (IIS.singleton IS.empty);;
let set = IS.of_list [1;2;3];;
let r = powset set;;
List.map IS.elements (IIS.elements r);;

现在,我要做的唯一一件事就是实现条件,以使我们从集合中获得的每个子集都需要恰好有k个元素。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以使用List.filter对获得的最新结果轻松进行此操作,可以提取具有给定元素数量的元素。

 List.filter (fun x -> List.length x = k) (List.map ...);;