はい、それは統合します。それは、評価される用語であるためです。また、あなたが指摘した最初の例でg(Y)も同様です。a
プロローグ インタープリターで評価を確認できます。
?- f(g(Y),h(c,d)) = f(X,h(W,d)).
X = g(Y),
W = c.
統合プロセスは、深さ優先の方法で機能し、メンバーを統合し、それ以上の組み合わせが不可能になるまで、利用可能な回答をそれぞれ返します。
これは、統合メソッドが に対して呼び出されf(g(Y),h(c,d)) = f(X,h(W,d))、利用可能なマッチングを見つけることを意味します: g(Y) = X, h(c, d) = h(W, d)。
次に、 に対して統合が実行されます。g(Y) = Xそれ以上の可能な削減がないため、 が返されますX = g(Y)。
次に、同じメソッドが matching に対して呼び出され、h(c, d) = h(W, d)が得られます。c = W他の一致は得られないため、結果は になりW = cます。
統合後の回答が返され、通常、false一致がない場合、またはそれ以上の一致が不可能な場合にポイントに戻されます。
CapelliC が指摘したように、変数Yは、統合プロセスの後もバインドされていません。統合は、バインドされていない変数に対して実行されます。つまり、次のことを意味します。
return の統一。 は項であり、バインドされていない var ではないため、統一を継続できh(c, d) = h(W, d)ます。h(_) = h(_)h
の統一はd = d用語の一致であり、帰属や拘束を形成するものではありません。
フォームの統一はc = W属性を形成し、変数Wは以前にバインドされていなかったため、用語cにバインドされます-そうでない場合は比較が実行されます。
の統一は、X = g(Y)単に非束縛変数Xを項g(Y)にg(Y)束縛し、 への利用可能な統一がないため、束縛されていない変数を持つ項g(Y)です。
よろしく!