0

在序言中,如果列表包含的元素是A/B.

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

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

谢谢。

4

1 回答 1

1
  • 您可以测试一个变量以查看它是否绑定到某个东西(使用谓词var/1and 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)). 
于 2013-04-05T15:35:09.750 回答