问题说:
编写一个函数,该函数返回给定集合中具有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个元素。我该怎么办?
答案 0 :(得分:1)
您可以使用List.filter
对获得的最新结果轻松进行此操作,可以提取具有给定元素数量的元素。
List.filter (fun x -> List.length x = k) (List.map ...);;