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]
。どうやってやるの?