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).

不同之处在于==/1 检查这两个术语是否相等,并且未实例化的变量(具有不同的名称)被视为不同。另一方面,=/2统一这两个术语,根据需要进行实例化。

如果您在 head ( ) 中使用实例化模式,f([fact(a,_)|T]):- stuff.它的行为与=/2

于 2012-10-10T23:37:54.737 回答