読者です 読者をやめる 読者になる 読者になる

ジョセフの日記

Haskellのこととか日常のこととか

多変数アッカーマン関数

今回は多変数アッカーマン関数です。
Haskellでは2変数アッカーマン関数はただ定義通り書けば素直に動いてくれます。
サンプルプログラムにもよく使われます。

しかし、多変数アッカーマン関数となると話は別で定義は簡単なのにプログラムに起こすとゴチャゴチャしました。
もっと綺麗に記述する方法はあるはずですがもう思いつきません。
多変数アッカーマン関数についての詳細は以下のリンクをご覧ください。
ja.googology.wikia.com

プログラムなどは続きを読むからどうぞ。

今回一番難儀したのがリンク先にある4個目の定義の記述でした。
2行に渡るパターンマッチになりましたし、わざわざy関数を定義してるところから無理矢理感が見て取れます。
リストの最終要素を取り除いたり、replicate関数でy関数の出力から[0,0,\ldots,0]を作ったり忙しいです。

今回のプログラムによる幾つかの計算結果です。

以下が今回のプログラムです。