标签: 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).
这是我的计划。非常感谢你!
答案 0 :(得分:0)
您正在寻找findall/3。
findall/3
findall(+Template, :Goal, -Bag) 创建一个实例化列表Template连续回溯Goal并使用Bag统一结果。如果Goal没有解决方案,则成功列出空列表。 findall/3相当于bagof/3,所有自由变量都与存在运算符(^)绑定,但bagof/3在Goal没有解决方案时失败。
findall(+Template, :Goal, -Bag)
创建一个实例化列表Template连续回溯Goal并使用Bag统一结果。如果Goal没有解决方案,则成功列出空列表。 findall/3相当于bagof/3,所有自由变量都与存在运算符(^)绑定,但bagof/3在Goal没有解决方案时失败。
Template
Goal
Bag
bagof/3
^
示例:
?- findall(X, comb(2, [a,b,c,d], X), Xs). Xs = [[a, b], [a, c], [a, d], [b, c], [b, d], [c, d]].