== /2 は項の比較で、= /2 はユニフィケーションです。
グラウンド(変数が含まれない)項においては、どちらの真偽も同じ結果になりますが、
変数が含まれる場合、真偽は異なる場合があります。
?- a(X) == a(1).
no
?- a(X) = a(1).
X = 1
yes
?-a(X)==a(X).
X = X_9
yes
?- a(X)==a(Y).
no
?-a(X)=a(Y).
X = X_9
Y = X_9
yes
なお、AZ-Prolog のトップレベルでの変数の束縛関係は
変数名 = 変数セルアドレス
となりますので、最後の例ではX,Yとも同じアドレスを指していることが分かります。
他処理系では X = Y のような表現もあります。
また、虚変数(”_” のみの変数)の場合、トップレベルでの表示では出現順に番号をつけて区別しています。
?- a(_,_) = a(aaa,bbb).
_.3 = aaa
_.4 = bbb
yes