在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