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

ジョセフの日記

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

ベクレミシェフの虫(2/5 18:42更新)

あまりHaskell(GUI関係)をする気になれなかったのでHaskell(それ意外)をしてました。
再帰関数について調べたら久々に巨大数wikiでも見てみるかと思い立ったので、ベクレミシェフの虫という一人ゲームをプログラムに書いてみました。
ベクレミシェフの虫について詳しくは
ja.googology.wikia.com

こちらを読んでください。

プログラムや遊んだ結果などは続きを読むからどうぞ。



一応動作確認のために計算した初期リストとその結果を載せます。
参考にした巨大数wikiの初期リスト [1],[2]の結果と同じです。一安心。

今度は初期リストを [1,0]*nとしてみた場合です。リストとnの積はそのリストの結合を表します。つまり、 [1,0]*4 = [1,0,1,0,1,0,1,0]のことです。

なんとなく、 Worm([1,0]*n) =  5\cdot {\displaystyle \sum_{k=0}^{n-1}} 2^kな感じがしますね。初期リストが [1,0]*10まではこれが成り立つことを確認しました。

今回作ったプログラムです。

プログラムを2/5の18:42に修正加えました。headがlastになります。

bad関数でreverseを2回使うのはtakeWhileを使うためで良いとして、good関数でそれを用いてtake関数を使ってるのは冗長な気がするので改善したい点ですね。

余談
AtomでPlatformIO IDE TerminalというAtom内でターミナルを使うパッケージを使用しているのですが、いきなりrunghcをコマンドと認識しなくなって、stack runghcもアクセスが拒否されましたと怒られてしまう様になってしまったのですが、解決方法を知ってる方はおられるでしょうか……
Scriptというパッケージでも怒られているので、Atom内部で何かがおかしくなっているのだと思います。普通のcmdではrunghcが使えるのでそれほど絶望的な状況ではないのですが。