append([],Y,Y).
append([U|X],Y,[U|Z]) :- append(X,Y,Z).

% の引数順序を逆にした上で-,=オペレータを使って一つの複合項に仕立てる
% そして述語名もappendから差分に変更した

差分(Y-Y=[]).      % L-L=[] である
差分([U|Z]-Y=[U|X]) :-  % [U|Z]-Y=[U|X] も差分関係にある
差分(Z-Y=X).       % Z-Y=X が差分関係にあるならば

?- 差分([a,b,c]-Y=X).
Y=[a,b,c], X=[];
Y=[b,c], X=[a];
Y=[c], X=[a,b];
Y=[], X=[a,b,c];
false.

% append/3の非決定性の使用は、実はリストの差分を求めている。