差集合を求める述語を定義したいと思うのですが、なかなかできないのでヒントをお願いします。

�@
difference([a,b,c,d],[b,a],Z).
|?- Z=[c,d]
�A
difference([b,a],[a,b,c,d],Z).
|?- Z=[c,d]
�B
difference(X,[b,a],[c,d]).
|?- X=[a,b,c,d]

が全て成り立つようにしたいのです。
�@、�Aはできたのですが、�Bを入力したときに終わらなくなります。
よろしくお願いします。