>我在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
具有相同的行为