プログラミングを中心に技術的な事柄を忘れないように書き残します。思い、Haskellでハノイの塔を解く処理を書いてみました。Haskellの文法をそっくり忘れていましたが、思い出しつつ書きました。aハノイの塔のルールまずはハノイの塔についてですが、Wikipediaを見れば早いのでどうぞ。ルールだけ引用すると以下の通りです。以下のルールに従ってすべての円盤を右端の杭に移動させられれば完成。3本の杭と、中央に穴の開いた大きさの異なる複数の円盤から構成される。最初はすべての円盤が左端の杭に小さいものが上になるように順に積み重ねられている。円盤を一回に一枚ずつどれかの杭に移動させることができるが、小さな円盤の上に大きな円盤を乗せることはできない。ハノイの塔のアルゴリズムこのゲームを解くためには円盤の移動を繰り返す必要があります。この移動を再帰アルゴリズムとして実装してやります。移動させる関数を考えてみます。円盤が2つの場合まず円盤が2つの場合を考えてみます。2つの円盤を移動させるには、以下の順番で動かします。次に円盤が1つの場合を考えます。これは単純に移動させるだけです。円盤がない場合は当然移動の必要はありません。上記例を踏まえた上で、円盤の数がnの場合の処理を考えてみます。ここでは具体例としてn=3の場合を考えてみます。ここで具体的な手順ではなく、おおまかな考え方をしてみます。移動させるここでの手順1について考えてみると、円盤が2の場合の処理と同じなことに気が付きます。手順3は手順1と同じ動作(単に移動先が違うだけ)です。円盤3は一番大きいものなので上に円盤1も円盤2も乗せることができる、つまり円盤3は無視して一時置き場として利用できます。これを円盤の数がnの場合について考えてみると次のようになります。