在prolog中我有关于此规则的问题,如果列表包含A/B
的元素,则会得到证明。
match(A,B,[H|T]) :- (H=A/B -> !; match(A,B,T)).
当我为A和B以及列表提供实例化变量时,这是有效的。但是如果我将列表作为变量给出,那么我会得到一个列表,其中包含我不想获得的_GXXXX
之类的未实例化变量。有谁知道如何解决这个问题?
感谢。
答案 0 :(得分:0)
var/1
和nonvar/1
)因此,例如,如果您想要第三个参数失败,如果它没有实例化,您可以这样做:
match(A,B,L) :-
nonvar(L),
L=[H|T],
(H=A/B -> !; match(A,B,T)).
如果您只关心示例中的H
,那么您可以:
match(A,B,[H|T]) :- nonvar(H), (H=A/B -> !; match(A,B,T)).