1

私は匿名変数を含む一連の事実をプロローグに持っています_

fact(a, _).
fact(b, _).
fact(c, _).

そして私はこれらの事実のリストを取り入れたいくつかのルールを持っています:

f([H | T]) :- H == fact(a, _),
              % stuff %
              .

ただし、これは機能していません。ルールは最初の句を超えていませんH == fact(a, _)。私は何が間違っているのですか?平等のための別の演算子はありますか?

4

1 に答える 1

4

はい、おそらく使用する必要があります=/2

1 ?- H == fact(a,_).
false.

2 ?- H = fact(a,_).
H = fact(a, _G0).

違いは、2つの項が等しいかどうかを==/1 チェックし、インスタンス化されていない変数(異なる名前を持つ)が異なるものとして扱われることです。一方、=/22つの用語を統合し、必要に応じてインスタンス化します。

頭の中でインスタンス化パターンを使用する場合(f([fact(a,_)|T]):- stuff.)は、=/2

于 2012-10-10T23:37:54.737 に答える