2012-05-26 57 views
-6

,輸出應該是這樣的:河內塔 - 河內的塔另一個輸出

?-move(3,[1,2,3],[],[],A1,B1,C). 

A1=[]. 
B1=[1,2,3] 
C=[]. 

我知道如何做到這一點:

move(1,[H|T],B,C,A1,B1,C) :- 
         A1 = T, 
         B1 = [H|B], 
         C1 = C. 
move(N,A,B,C,A1,B1,C) :- 
         N>1, 
         M is N-1, 
         move(M,[H|T],C,B,A1,B1,C), 
         move(1,[H|T],B,_,A1,B1,C), 
         move(M,C,B,[H|T],A1,B1,C). 

但接下來的問題是: 「重寫在一舉一動之後提供塔式插圖的計劃「。它的輸出應該如下所示:

?- move(3,tower(a,[1,2,3]),tower(b,[]),tower(c,[]),A,B,C). 
    a[2 3] b[1] C[] 
    a[3] b[1] C[2] 
    a[3] b[] C[1 2] 
    a[] b[3] C[1 2] 
    a[1] b[3] C[2] 
    a[1] b[2 3] C[] 
    a[] b[1 2 3] C[] 
    A = tower(a, []) 
    B = tower(b,[1, 2, 3]) 
    C = tower(c,[]) 

這怎麼辦?

+6

什麼是你的問題? – woz

+0

@ user1415038我剛剛更新了問題,如果你能給我一隻手 – user1400451

+0

@SeçkinSavaşçı,對不起。這個問題是我更新 – user1400451

回答

1

您可以使用下面的謂詞打印空格分隔列表:

write_list_([]) :- write(']'). 
write_list_([X|Xs]) :- write(' '), write(X), write_list_(Xs). 

write_list([]) :- write('[]'). 
write_list([X|Xs]) :- write('['), write(X), write_list_(Xs). 
+0

我試過,但我仍然堅持在那裏不能出去。對我來說沒什麼時間,星期一下午考試。真的需要幫助 – user1400451

+0

http://www.csupomona.edu/~jrfisher/www/prolog_tutorial/2_3.html –