はい、それは統合します。それは、評価される用語であるためです。また、あなたが指摘した最初の例で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)
です。
よろしく!