,您只需要在「包」的X
和Y
連成一個元組,如:
tuple_gp((X,Y)) :-
gp(X,Y).
tuple_ggp((X,Y)) :-
ggp(X,Y).
這就可以回答:
?- tuple_gp(T).
T = (0, 0) ;
T = (0, 1) ;
T = (0, 2) ;
T = (0, 0) ;
T = (0, 2) ;
T = (0, 1) ;
T = (0, 1) ;
T = (0, 0) ;
T = (0, 2) ;
T = (1, 0) ;
T = (1, 1) ;
T = (1, 2) ;
T = (1, 1) ;
T = (1, 0) ;
T = (1, 2) ;
T = (1, 0) ;
T = (1, 2) ;
T = (1, 1) ;
T = (2, 0) ;
T = (2, 2) ;
T = (2, 1) ;
T = (2, 0) ;
T = (2, 1) ;
T = (2, 2) ;
T = (2, 1) ;
T = (2, 0) ;
T = (2, 2).
如果你想生成所有可能的元組的列表,您可以使用findall/3
:
?- findall((X,Y),gp(X,Y),L).
L = [ (0, 0), (0, 1), (0, 2), (0, 0), (0, 2), (0, 1), (0, 1), (0, 0), (..., ...)|...].
?- findall((X,Y),ggp(X,Y),L).
L = [ (0, 0), (0, 1), (0, 2), (0, 0), (0, 2), (0, 1), (0, 1), (0, 0), (..., ...)|...].
如果只想獲得獨特元組,你可以使用setof/3
:
?- setof((X,Y),X^Y^gp(X,Y),S).
S = [ (0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (..., ...)].
好的,謝謝ü非常。我還有一個疑問。如果我想找到只產生gp(0,1)和ggp(1,2)的元組,那麼該怎麼辦? – confucious
你是指只產生'gp(0,1)'和'ggp(1, 2)'?謂詞不會產生任何東西......謂詞只是「真」或「假」(或觸發錯誤)。 –
在給定的事實中,如par(0,0),par(0,1)....假設你只有規則gp,那麼我們如何確定par()中的哪些組合可以將gp元組作爲(0,1) – confucious