2

Задача: Построить все сочетания по n элементов заданного множества. Пример:

?-comb(2, [1, 2, 3], X). 
X = [[1, 2], [1, 3], [2, 3]]. 

Написал такие процедуры:

comb(0, _, [[]]).
comb(N, [X|T], [X|Comb]) :- N > 0, N1 is N-1, comb(N1, T, Comb).
comb(N, [_|T], Comb) :- N > 0, comb(N, T, Comb).

Но они выводят просто подряд:

X = [1, 2]
X = [1, 3]
X = [2, 3]

А нужно это все внести в список. И я не могу понять, как это сделать Пытался перевести с haskell такой код:

comb _ [] _ = []
comb n (y:ys) len
    | n >= len = [y:ys]
    | n == 0 = [[]]
    | otherwise = map (y:) (comb (n - 1) ys (len - 1)) ++ comb n ys (len - 1)

Но тоже ничего не получилось. Какое может быть решение данной задачи?

Al_Rez
  • 23

0 Answers0