Пролог: как я могу изменить вывод комбинаций (N, [H | T], P), чтобы он возвращал список пар, а не только первую предыдущую; - PullRequest
0 голосов
/ 18 мая 2018

Пролог: Как я могу изменить вывод комбинаций (N, [H | T], P) , чтобы получить список пар, а не только первую предыдущую;?Программа работает хорошо, пока я нажимаю;в командной строке, но я хочу вернуть непосредственно список пар.

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

Это моя программа.Большое спасибо!

1 Ответ

0 голосов
/ 18 мая 2018

Вы ищете findall/3.

findall(+Template, :Goal, -Bag)

Создать список экземпляров Template последовательно возвращается при возврате Goal и объединить результат с Bag.Успешно с пустым списком, если Goal не имеет решений.findall/3 эквивалентно bagof/3 со всеми свободными переменными, связанными с экзистенциальным оператором (^), за исключением того, что bagof/3 завершается ошибкой, когда Goal не имеет решений.

Пример:

?- findall(X, comb(2, [a,b,c,d], X), Xs).
Xs = [[a, b], [a, c], [a, d], [b, c], [b, d], [c, d]].
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...