0

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

4

1 に答える 1