2013-06-03 23 views
1

收集回溯解決方案我有一個麻煩,在收集了退步的解決方案束縛水飽和度,序言,所以我的代碼是:在序言

fxd_cell(1,1,2). 
fxd_cell(1,3,7). 
fxd_cell(1,4,3). 
fxd_cell(1,6,1). 
fxd_cell(1,8,8). 
fxd_cell(2,2,5). 
fxd_cell(2,4,6). 
fxd_cell(2,5,2). 
fxd_cell(2,6,9). 
fxd_cell(2,9,4). 
fxd_cell(3,1,3). 
fxd_cell(3,2,6). 
fxd_cell(3,3,9). 
fxd_cell(3,6,4). 
% snip 
fxd_cell(9,7,4). 
fxd_cell(9,9,2). 


index(_,_). 
get_num(X) :- L=[1,2,3,4,5,6,7,8,9], member(X,L). 
isEmpty([]):- 1 = 1. 
isEmpty([H|_]):- \+ get_num(H),!. 

find_Empty(L):- fail . 
find_Empty(L):- get_num(X),get_num(Y),findall(Num,fxd_cell(X,Y,Num),L1),isEmpty(L1),L=  [index(X,Y)|LL]. 

當我打電話find_Empty(L)的結果將顯示爲:

L = [index(1, 2)|_G3978] 

當我按「;」喜歡另一種解決方案:

L = [index(1, 5)|_G3978] ; 
L = [index(1, 7)|_G3978] 

所示.. 不過,我想使L含有所有的解決方案,我該怎麼辦呢?

回答

1

使用findall/3

findall(X, find_Empty(X), L).