Как написать функцию, которая возвращает все подмножества с k элементами из данного набора в OCaml? - PullRequest
0 голосов
/ 27 октября 2018

Проблема говорит:

Напишите функцию, которая возвращает все подмножества с 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 голосов
/ 27 октября 2018

Вы можете легко сделать это с последним результатом, используя List.filter, вы можете извлечь элементы с заданным количеством элементов.

 List.filter (fun x -> List.length x = k) (List.map ...);;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...