我一直在尝试解决以下问题一段时间,但似乎找不到正确的解决方案。
假设有一个函数 test(X,Y,Z) 使得 X 是一对数字,Y 是对的列表,Z 是传递对的结果列表。
例如:
test((1,5), [(7,3),(5,2),(5,9)], Z).
Z = [(1,2),(1,9)]
(因为传递性 1->5->2 和 1->5->9)
到目前为止,我已经设法创建了以下代码:
test(_,[],_):- false.
test((X1,C),[(C,Y2)|_],(X1,Y2)).
test((X1,X2),[_|YT],Result) :- test((X1,X2),YT,Result).
它返回每个单独的结果对,如下所示:
Z = (1, 2) ;
Z = (1, 9) ;
但我似乎无法将它们全部返回到一个列表中,如上例所示:
Z = [(1,2),(1,9)]
任何帮助将不胜感激。