最后将谓词生成的所有列表添加到一个大列表中
Add all generated lists from a predicate into one big list at the end
我有一个函数可以为每次迭代生成一个列表。
(所以在查询结束时生成了很多列表)。
是否可以在谓词循环之外将所有生成的列表收集到一个大列表中?
?- path(i,k,Path).
Path = [segmentTime(red,i,m,2),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)] ? ;
Path = [segmentTime(blue,i,m,3),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)] ? ;
Path = [segmentTime(purple,i,j,3),segmentTime(blue,j,k,2)] ? ;
变成类似
的东西
AllPaths = [[segmentTime(red,i,m,2),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)],
[segmentTime(blue,i,m,3),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)],
[segmentTime(purple,i,j,3),segmentTime(blue,j,k,2)]]
*我的代码很复杂,所以像 [1,2,3,4,5] 这样的简单示例的代码片段就足够了。
您可以使用 setof
内置谓词。我在下面链接了它的工作原理。
path([1,2,3,4]).
path([1,2,3,5]).
path([1,2,3,6]).
pathAll(X):- setof(A,(path(A)),X).
输出
?- X = [[1, 2, 3, 4], [1, 2, 3, 5], [1, 2, 3, 6]]
您可以按如下方式重写您的代码。
pathAll(X) :- setof(Path,(path(i,j,Path)) , X).
输出
?- pathAll(AllPaths).
AllPaths = [[segmentTime(red,i,m,2),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)],
[segmentTime(blue,i,m,3),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)],
[segmentTime(purple,i,j,3),segmentTime(blue,j,k,2)]]
希望这对你交配有所帮助。如果这对你有帮助,非常感谢
我有一个函数可以为每次迭代生成一个列表。 (所以在查询结束时生成了很多列表)。
是否可以在谓词循环之外将所有生成的列表收集到一个大列表中?
?- path(i,k,Path).
Path = [segmentTime(red,i,m,2),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)] ? ;
Path = [segmentTime(blue,i,m,3),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)] ? ;
Path = [segmentTime(purple,i,j,3),segmentTime(blue,j,k,2)] ? ;
变成类似
的东西AllPaths = [[segmentTime(red,i,m,2),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)],
[segmentTime(blue,i,m,3),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)],
[segmentTime(purple,i,j,3),segmentTime(blue,j,k,2)]]
*我的代码很复杂,所以像 [1,2,3,4,5] 这样的简单示例的代码片段就足够了。
您可以使用 setof
内置谓词。我在下面链接了它的工作原理。
path([1,2,3,4]).
path([1,2,3,5]).
path([1,2,3,6]).
pathAll(X):- setof(A,(path(A)),X).
输出
?- X = [[1, 2, 3, 4], [1, 2, 3, 5], [1, 2, 3, 6]]
您可以按如下方式重写您的代码。
pathAll(X) :- setof(Path,(path(i,j,Path)) , X).
输出
?- pathAll(AllPaths).
AllPaths = [[segmentTime(red,i,m,2),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)],
[segmentTime(blue,i,m,3),segmentTime(blue,m,j,4),segmentTime(blue,j,k,2)],
[segmentTime(purple,i,j,3),segmentTime(blue,j,k,2)]]
希望这对你交配有所帮助。如果这对你有帮助,非常感谢