このディレクトリの索引
http://hibari.2ch.net/test/read.cgi/tech/1308749241/658
#  [1] C言語演習 
#  [2] ハノイの塔 
#  次のルールに基づき、全ての円盤を右側の杭に移動するまでの移動手順を示す 
#  プログラムを作成しなさい。 
#   
#  ルール: 
#  ・3本の杭と、中央に穴の開いた大きさの異なる複数の円盤から構成される。 
#  ・最初はすべての円盤が左端の杭に小さいものが上になるように順に積み重ねられている。 
#  ・円盤を一回に一枚ずつどれかの杭に移動させることができるが、小さな円盤の上に大きな円盤を乗せることはできない。 
#  初期状態 円盤の数=3 
#  [3.1] Windows7 
#  [3.3] C言語 
#  [4] 7/15 7時まで 
#  [5] 関数呼び出し、作成まで 
#  よろしくお願いします。 
#   
# 
% ?- ハノイの塔(['___|___','__|__','_|_']).
%   _|_   :: 左 から 中
%  __|__  :: 左 から 右
%   _|_   :: 中 から 右
% ___|___ :: 左 から 中
%   _|_   :: 右 から 左
%  __|__  :: 右 から 中
%   _|_   :: 左 から 中

ハノイの塔(L) :-
        ハノイの塔(L,A,B,C,X),
        A = '左',B = '中',C = '右',
        append(_,[U :: V to W|R],X),
        writef('%11c :: %t から %t\n',[U,V,W]),
        R = [].

ハノイの塔([U],A,B,C,[U :: A to B]).
ハノイの塔([U|Ln],A,B,C,Moves) :-
        ハノイの塔(Ln,A,C,B,M1),
        ハノイの塔(Ln,C,B,A,M2),
        append(M1,[U :: A to B|M2],Moves).
ハノイの塔([],A,B,C,[]).