例題(ハノイの塔)


この例は、ハノイの塔の解を KLIC 側で求め、その手順を Tcl/Tk の GUI を用いて出力する例です。

プログラム

プログラムは、sample/hanoi ディレクトリの下にあります。
このプログラムは、2つのファイルから構成されます。

コンパイル

このプログラムは、sample/hanoi のディレクトリにあります。
このプログラムを利用する前に、トップディレクトリで make を行い、 klitcld をコンパイルしておいてください。
このプログラムをコンパイルするには、このディレクトリで make すればOKです。
コンパイルが終了すると、hanoi という名前の実行ファイルが出来ていると思います。

実行

まず、klitcld を実行します。これは、Tcl/Tk を実行するためのプログラムです。
% ./kltcld &
のようにして、バッググラウンドで実行させるとよいでしょう。
このあと、
% ./hanoi
とすると、プログラムが動作します。
Tcl/Tk の GUI は、

hanoi

のように表示され、アニメーション表示されます。
左の棒から中央の棒へ移動します。
終了したい場合は、「Quit」ボタンを押してください。

プログラムの説明

まず、klitcl:tcl_eval/4 を用いて、"set num 6"コマンドを実行し、Tcl/Tk 側に大きさを指定しています。
その後に、klitcl:tcl_evalfile/4 を利用して hanoi.tcl ファイルを読み込み、実行しています。これにより、GUI の表示が行われます。
そして、hanoi/3 によりハノイの塔が解かれます。この中では、move/6 が再帰的に呼び出されています。
move/6 では、hanoi.tcl に記述してある"diskmove"コマンドを実行し、解のアニメーション表示を行っています。

hanoi.tcl で用いられている変数は、以下のとおりです。
なお、棒の番号は、左から1,2,3となっています。

num
ハノイの塔のサイズ
stick(n)
n番の棒にある円盤の数
diskpl(n)
大きさがnの円盤がある棒の番号
diskid(n)
キャンバス内での、大きさがnの円盤のID