比较 prolog 匿名变量



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

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

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

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

但是这是行不通的。该规则不会超过第一句H == fact(a, _)。我做错了什么?平等有不同的运算符吗?

是的,您可能应该使用 =/2

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

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

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

最新更新