在prolog中,如果列表中包含的元素是A/B
,我有关于此规则的这个问题,该规则得到证实。如何在序言中避免未经证实的变量?
match(A,B,[H|T]) :- (H=A/B -> !; match(A,B,T)).
这适用于当我给A和B的实例化变量和列表。但是,如果我将列表作为变量给出,那么我会得到一个列表,其中包含无意义的变量,如我不想获得的_GXXXX
。有谁知道如何解决这一问题?
谢谢。
在prolog中,如果列表中包含的元素是A/B
,我有关于此规则的这个问题,该规则得到证实。如何在序言中避免未经证实的变量?
match(A,B,[H|T]) :- (H=A/B -> !; match(A,B,T)).
这适用于当我给A和B的实例化变量和列表。但是,如果我将列表作为变量给出,那么我会得到一个列表,其中包含无意义的变量,如我不想获得的_GXXXX
。有谁知道如何解决这一问题?
谢谢。
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)).
同样,它不完全清楚你想达到什么。既可以明确定义你需要的结果,也可以给出例子。 – 2013-04-05 15:56:16