前回の記事に「例外は限定継続の上に乗っける感じで実装するべきなのかもしれません」と書きました。この記事では、その辺の話を掘り下げ、「Representing Monads」に繋げます。
続きを読む「プログラミング」カテゴリーアーカイブ
LunarMLと継続
LunarML進捗・2022年4月
月刊LunarML進捗報告です。前回は
で、3月はHaskellの記事を書くのに忙しかったので休刊でした。
今月の進捗を一言で言うと、JavaScriptバックエンドの実装を進めました。
面白いと思った方はGitHubにスターをつけてください:
続きを読む浮動小数点数の文字列化(基数変換)
動機付けと問題
計算機の内部では二進浮動小数点数が使われることが多い一方で、プログラムのソースコードやテキストベースのデータ形式(例:JSON)では十進小数が使われることが多い。
データのシリアライズ等で、内部的な二進浮動小数点数を十進小数に変換して、再度二進小数に戻すという操作が考えられる。この時、元々の二進小数の値が保持されることが望ましい。
有限桁の二進小数は原理的には有限桁の十進小数で表現できるが、指数部が大きかったり小さかったりすると仮数部の桁数も膨張するため実用的ではない。
そこで、基数変換の際に丸めが発生することを許容して、二進小数→十進小数→二進小数の変換が恒等写像となるようにしたい。ただし丸めの方法は最近接丸めであるとする。この時、
- 途中の十進小数の仮数部は何桁あれば十分か?
- なるべく短い桁数の十進小数を、正しい丸めで得るためのアルゴリズムはどのようなものか?
という問題が考えられる。
続きを読む執筆中:「Haskellでの型レベルプログラミング」
LunarML進捗・2022年2月
Successor MLの話
Successor MLとは
Standard MLの仕様は、1997年に出版されたThe Definition of Standard ML (Revised)が最後の版である。しかし、その後も仕様を修正・改良しようという努力が断続的に行われており、Successor MLと呼ばれている。
現行の仕様は以下のGitHubリポジトリーで管理されている:
https://github.com/SMLFamily/Successor-ML
現在のLaTeXではそのままでは処理できないので、https://github.com/SMLFamily/Successor-ML/pull/46の変更を参考にされたい。また、電子的に閲覧したい場合はdefinition/root.texの
%\usepackage{hyperref}
をコメント解除すると良いだろう。ClutTeXを使うと
cd definition && cluttex -epdflatex --bibtex=bibtex root.tex
で処理できる。
ゼロ年代の古いWikiは以下のリンクから辿れる:
https://smlfamily.github.io/successor-ml/
続きを読むLunarMLの進捗・2022年1月
Standard ML on LuaTeXしてみる
この記事は TeX & LaTeX Advent Calendar 2021 の15日目の記事です。
続きを読むLunarMLの進捗2021
この記事は ML (Meta Languages) Advent Calendar 2021 の8日目の記事です。
数年前からLunarMLというStandard MLコンパイラーを作っています。この記事では、LunarMLの今年の進捗を報告します。
続きを読む