2012-05-26 2 views
-6

для башни Ханоя, вывод должен выглядеть следующим образом:Hanoi Towers - еще один выход

?-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çkin Savaşçı, извините за это. этот вопрос я обновил – 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 –