我在prolog中有一系列包含匿名变量_
的事实。
fact(a, _).
fact(b, _).
fact(c, _).
我有一些规则可以列出这些事实:
f([H | T]) :- H == fact(a, _),
% stuff %
.
然而,这不起作用。规则不会超过第一个条款H == fact(a, _)
。我究竟做错了什么?是否存在不同的运算符?
答案 0 :(得分:5)
是的,您应该使用=/2
:
1 ?- H == fact(a,_).
false.
2 ?- H = fact(a,_).
H = fact(a, _G0).
不同之处在于==/1
检查如果两个术语相等且非实例化变量(具有不同名称)被视为不同。另一方面,=/2
统一了两个术语,根据需要进行实例化。
如果在头部使用实例化模式(f([fact(a,_)|T]):- stuff.
),则它与=/2
具有相同的行为