2013-05-03 41 views
4

這是序言輸出什麼,我試圖讓:Prolog的輸出:列表元素,而不是定位

?-mill(try(a,b,c,d,e),R). 
R = (e:-c) ; 

有了下面的代碼,我得到的數字輸出。我怎樣才能得到(e:-c)輸出,而不是他們的名單號碼?

?-mill(try(a,b,c,d,e),R). 
R = (5:-3) ; 

代碼:

try(-,+,+,+,+). 
try(-,-,+,+,+). 
try(+,+,+,+,+). 
try(+,+,-,-,-). 
try(+,-,-,+,-). 

construct(X, Y):- 
    functor(X,F,N), functor(Y,F,N). 

row_number(X, Y):- 
    findall(a, X, List), length(List, Y). 

reason(Table,A,B):- 
    calc(Table,A,+,PA), 
    calc(Table,B,+,PB), 
    calc(Table,A,+,B,+,PP), 
    calc(Table,A,+,B,-,PM), 
    PA=PB, 
    PM=0. 

calc(Table,Column,Body,Number):- 
    construct(Table,Var), 
    arg(Column,Var,Body), 
    row_number(Var,Number). 

calc(Table,A,Abody,B,Bbody,Number):- 
    construct(Table,Var), 
    arg(A,Var,Abody), 
    arg(B,Var,Bbody), 
    row_number(Var,Number). 

mill(Table,B:-A):- 
    functor(Table,_,B), 
    row_number(reason(Table,A,B),1), 
    reason(Table,A,B). 

回答

0

經過這樣的修改

mill(Table,B_:-A_):- 
    functor(Table,_,B), 
    row_number(reason(Table,A,B),1), 
    reason(Table,A,B), 
    arg(A, Table, A_), 
    arg(B, Table, B_). 

我得到

?- gtrace,mill(try(a,b,c,d,e),R). 
R = (e:-c) ; 
false. 

您應該檢查單PP,這一目標

..., 
calc(Table,A,+,B,+,PP), 
... 

可能沒用...