Ленивый «н выбирай к» в OCaml

Как часть большей проблемы перечисления набора, мне нужно написать функцию OCaml «выбирать», которая принимает список и выводит в виде списка всех возможных последовательностей размера k, составленных из элементов этого списка (без повторяющихся последовательностей, которые могут быть получены друг от друга путем перестановки). Порядок их размещения в конечном списке не имеет значения.

Например,

choose 2 [1;2;3;4] = [[1;2];[1;3];[1;4];[2;3];[2;4];[3;4]]

Есть идеи?

Я хотел бы, чтобы все было ленивым, выводя ленивый список, но если у вас есть строгое решение, это тоже будет очень полезно.

Ответы на вопрос(3)

Ваш ответ на вопрос