マクロツイーター

はてダから移行した記事の表示が崩れてますが、そのうちに直せればいいのに(えっ)

LISP on TeX で階乗な「千反田える」をしてみた

例の LISP on TeXかなり LISP になってきている。ということは何かネタを出す必要性が否応無く生じるわけであるが、ちょっと様子見ということで、階乗で「えるたそ」してみた。肝心の「千反田える」が現れないが気にしない。

(リストを多用するプログラムのテストが目的。)

※内部の再帰関数の定義方法が少し異様になっているが、これは letrec が実現できないため。*1

upLaTeX*2コンパイルした結果は以下の通り。

無量大数」の桁まで計算できているが、実はこれがギリギリであり、\listEltasoFactorial の引数をこれより増やすと、(main_memory の制限より先に)hash_size の制限に引っかかってしまう。((ここでいう「ハッシュ」とは複数文字の制御綴を登録するためのもので、新しい名前の制御綴が登場する度に空き領域が消費される。\tracingstats で表示される情報では、「〜 multiletter control sequences out of 〜」がそのハッシュの情報を示している。原理的に「解放」ができないので、この領域の不足への対処は main_memory よりも厄介だと思われる。領域の大きさは texmf.cnf の hash_extra で設定可能であり、TeX Live 2012 での既定値は 200000 である。))

*1:letrec のマクロを作ろうとすると、非大域環境への set! が必要になるが、確かそれは非対応だったはず。

*2:upTeX エンジンにしているのは単に〈秭〉(U+79ED)を簡単に出すため。BMP 外の〈𥝱〉(U+25771)は少し面倒。