比较prolog匿名变量

时间:2012-10-10 23:30:48

标签: prolog

我在prolog中有一系列包含匿名变量_的事实。

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

我有一些规则可以列出这些事实:

f([H | T]) :- H == fact(a, _),
              % stuff %
              .
然而,这不起作用。规则不会超过第一个条款H == fact(a, _)。我究竟做错了什么?是否存在不同的运算符?

1 个答案:

答案 0 :(得分:5)

是的,您应该使用=/2

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

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

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

如果在头部使用实例化模式(f([fact(a,_)|T]):- stuff.),则它与=/2具有相同的行为