我有一组形式的定义pair/2
和一个谓词propagate/3
:
pair(1, 2).
pair(2, 3).
pair(3, 4).
pair(4, 5).
propagate([], _, []) :- !.
propagate([pair(N, Num)|Tail], Num, [N|ResultTail]) :-
propagate(Tail, Num, ResultTail), !.
propagate([pair(Num, N)|Tail], Num, [N|ResultTail]) :-
propagate(Tail, Num, ResultTail), !.
propagate([_|Tail], Num, Result) :-
propagate(Tail, Num, Result), !.
如果我有List = [pair(1, 2), pair(2, 3), pair(3, 4), pair(4, 5)]
而且我有
propagate(List, 2, Result).
我得到了想要的输出,Result = [1, 3]
; 即与 形成对的所有数字的列表2
。
但是,如果我有List = [pair(N1, N2), pair(N2, N3), pair(N3, N4), pair(N4, N5)]
并且如果我有
propagate(List, N2, Result)
那么输出是
N2 = N3, N3 = N4, N4 = N5,
Result = [N1, N5, N5, N5].
Result = [N1, N3]
相反,我希望输出为。我怎样才能做到这一点?