Prolog:如何更改组合的输出(N,[H | T],P)以返回对的列表,而不是之前的第一个;?

时间:2018-05-18 19:36:30

标签: prolog

Prolog:如何更改组合(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 :(得分:0)

您正在寻找findall/3

  

findall(+Template, :Goal, -Bag)

     

创建一个实例化列表Template连续回溯Goal并使用Bag统一结果。如果Goal没有解决方案,则成功列出空列表。 findall/3相当于bagof/3,所有自由变量都与存在运算符(^)绑定,但bagof/3Goal没有解决方案时失败。

示例:

?- findall(X, comb(2, [a,b,c,d], X), Xs).
Xs = [[a, b], [a, c], [a, d], [b, c], [b, d], [c, d]].