У меня есть функция, которая делает комбинации из K различных объектов, выбранных из N элементов списка, проблема не в том, чтобы повторяться, например:
extract 2 ["a"; "б ";" с "" d "] ;;-: список строк списка = [["a";"Б"];[ "А";"С"];[ "А";"Г"];[ "B";"С"];[ "B";"Г"];[ "С";"d"]]
Вот мой код:
# let rec extract k list =
if k <= 0 then [ [] ]
else match list with
| [] -> []
| h :: tl ->
let with_h = List.map (fun l -> h :: l) (extract (k-1) tl) in
let without_h = extract k tl in
with_h @ without_h;;
Я пытаюсь понять, как это сделать, спасибо за ответ.