如何在prolog中避免未实例化的变量?

时间:2013-04-05 15:25:48

标签: prolog

在prolog中我有关于此规则的问题,如果列表包含A/B的元素,则会得到证明。

match(A,B,[H|T]) :- (H=A/B -> !; match(A,B,T)). 

当我为A和B以及列表提供实例化变量时,这是有效的。但是如果我将列表作为变量给出,那么我会得到一个列表,其中包含我不想获得的_GXXXX之类的未实例化变量。有谁知道如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

  • 您可以测试变量以查看它是否与某些内容绑定(使用谓词var/1nonvar/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)).