代数的実数を作るこのWebサイトについてプロフィールチャイラボタン活動報告(2019年1月)コメントを残す昨年末に「2018年振り返り」という記事を書いたが、これから当面の間、ああいう振り返り記事(活動報告)を定期的(1ヶ月か2ヶ月ごと)に書いていきたいと思う。Calendarの記事とか、色々目標があったが、年が変わるとそういう差し迫った目標はない。SML処理系の進捗https://github.com/minoki/DamepoML去年の夏に書きかけていたSML処理系が放置されていたので作業をした。取り組んだのは型推論パーサーのinfix周り(後回しにしていたやつ)の部分である。パーサーはinfix周りを処理してだいたい完成した(一部のシンタックスシュガーはまだ)ので、あとは型推論をもうちょっとちゃんとやって、コード生成に繋げていきたい。代数的数のHaskell実装の進捗https://github.com/minoki/algebraic-numbers「代数的数を作る」で作ったようなやつをもっとちゃんとしてHaskellパッケージとして使えるようにしたいと思っている。そのための作業を気が向いた時に行っている。一般には代数的実数は浮動小数点数ではないので変換の際には丸めを行うわけだが、最近接以外の丸め方向も実装できたと思う。それにしても、正規でない浮動小数点数の扱いは面倒だ。LANができない、複数のディスプレイに異なるDPIを設定できない、などの困難があってWindowsを入れた)。そのPCのSSDの調子が以前からおかしかった(仮想環境のLinuxが起動しなくなったり、でかいGitリポジトリのデータが破損してgitコマンドがクラッシュしていた)。おかしいとわかった時点で新しいSSDを買ってデータを移行するなどの措置を取るべきだったのだが、それをサボっていた結果ついにWindowsが起動しなくなった。簡単には修復できなさそう(Windowsのインストールディスクからは認識すらされない)なので、新しいSSDを買ってWindowsを再インストールすることにする。(使っていたSSDには3年保証があってこのSSDを入れてからは2年くらいしか経っていないので保証で交換してもらえそうな気がするが、購入時のレシートを探さないとどうにもならなさそうな気がするので、保証は後回しにしてSSDは新規に買うことにする)使っていたSSDは2.5インチSATA接続のやつで、使っているPCケースでは設置場所にアクセスするのにネジを6本以上外す必要がある。電源ケーブルとSATAケーブルの接続が必要で、配線も面倒である。最近はM.2と言ってマザーボード上に直接挿せるSSDが流行っている。M.2であればケーブルの配線も必要ないし、マザーボード上に直接載っているので取り回しが楽そうだ。2013年に買ったマザーボードにはM.2スロットはない。SSDを使うことにする。SSDを選び、そういうSSDに対応したPCIeカードを使う必要がある。いうわけで選んだSSDはWDの青いやつ(500GB)、選んだPCIeカードはainexのAIF-06Aである。PCIeカードにはSATA端子がついていてケーブルを介してマザーボードのSATA端子につなぐ。結局ケーブルかよ!という気もするが、それでも電源ケーブルを繋がなくて良い(マザーボードから取れる)のはメリットだし、うちのPCケースで2.5インチHDD/SSDの接続場所にアクセスするのにネジを6本外さなくても良いのはメリットだ。PCIeカード(AIF-06A)にSSDを載せたところPCIeカードをマザーボードに挿したところそんなわけでSSDを設置して、Windowsのインストール。最近のWindowsはMSの公式サイトからインストールディスクのイメージを落とせるし、ライセンス認証も再インストールの場合はよしなに計らってくれる。問題は、不自由で邪悪なソフトウェアの認証(プロダクトキーとかそういうの)がどうなるか、だ。使っていたDVD/Blu-rayプレイヤーはどうにかなった(インストーラーの再ダウンロードはできないようだったが、以前ダウンロードしたインストーラーが残っていたのでそこからセットアップできた)。後は何があったっけ......。1月末時点ではまだ開発環境とかのセットアップはできていないが、気が向いた時にちょいちょいやっていきたい。Haskell周り型クラスの和GADTsを使って型クラス制約の和を表現する記事を書いた。Haskellの型クラスとして表現する方法を考えていた時に思いついたものだが、難しい数学の例で説明してもその辺のプログラマーには伝わらない気がしたので、記事の中での例としてはIntegerとBoundedを使った。2)みたいな非効率極まりないコードを紹介されるのは......よくない。〜Haskellで非実用的なコードを書いて悦に入るのはやめろ〜という記事を書いた。この記事ではフィボナッチ数を順番に計算していく方法と、n番目のフィボナッチ数をピンポイントで計算する方法(ビネの公式、行列のべき乗)を紹介した。その後考えてみるとビネの公式を使う方法も行列のべき乗の方法も改善の余地があるな......と思ったので最速のフィボナッチ数計算を考えるという記事を書いた。doublingと呼ばれる方法を導出している。早い方法を天下り的に与えるのではなく、既知の方法の改良として、割と自然に話を持っていけたのは良かったと思う(自画自賛)(ほんまか?)。vectorとnewtypeそういう記事を書いていたところ、ツイッターでフィボナッチ数(の一般化)を題材にした競技プログラミングの問題を教えてもらった。vectorを使わないと制限時間をパスできない、ということが判明した。