2020年7月22日 / Maxima による大きな整数の表示

Maxima (CUI) を使って大きな整数を表示するとき、画面の幅(変数 linel の値くらいか)で改行が入る。たとえば:

(%i2) 100!;
(%o2) 933262154439441526816992388562667004907159682643816214685929638952175999\
932299156089414639761565182862536979208272237582511852109168640000000000000000\
00000000

(上記では note の仕様により行末が表示されてませんが、必要なら右にスクロールしてください。以下同様)

このとき、バックスラッシュが行末に挿入され、コピペしたいときにうっとうしい。

それにはいろいろな解決があるのだろうけど、私が好きなのは、TeX output を使うことかな。つまり、関数 tex() とか tex1() を使う。こんな感じ:

(%i3) tex(100!)$
$$
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000$$
(%i4)

input terminator に「$」を使っているのは、「;」だと false という結果が表示されて鬱陶しいからだ。また、TeX のディスプレイ数式のための「$$」が最初と最後に挿入されているが、それは気にしないことにしましょう。

ところが、wxMaxima の場合は、また事情が違ってくる。たとえば 100! を wxMaxima を使って計算してみると:

(%i11) 100!;
(%o11) 933262154439441526816992388562[98 digits]916864000000000000000000000000	

と、デフォルトでは表示される。「なんだよ[98 digits]って、勝手に省略するな!」と、むかつくわけです。

種明かしをすると、コピペすると、問題ないことが分かる。つまり、コピペすると、クリップボードにちゃんと「93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000」という文字列が入っていることが分かる。digits なんちゃらという文字はないので、安心してください。

しかし、この仕様は分かりにくいと思うんだけどなあ。Maxima 初心者は、ぎょっとするのではないか。

私のようなパラノイアは、ディスプレイ表示でも省略されないほうがいい。そのためには、wxMaxima の拡張コマンドである set_display を使って、set_display('ascii) か set_display('none) を実行する。ただ、処理が終わったあと、set_display('xml) としてデフォルトに戻しておいたほうがいいでしょう。

ちなみに、wxMaxima のメニューを使って、「Maxima → Change 2d Display」とドラッグすることによって、set_display の値をマウスだけで変更できる。

ただし、set_display('ascii) か set_display('none) としたときは、整数の表示が、美しくはない。毎回表示が違ってくるので、ストリームの関係かな。

もちろん、wxMaxima の場合でも、TeX output を使ってもよい。その場合は、tex() よりも、tex1() を使うのがおすすめです。

長々と書いてきたけど、Emacs の Maxima モードを使えば、何も問題ないかもしれない:

Maxima モードは使ったことがないので、こちらは分かりません。ごめんなさい。



この記事が気に入ったらサポートをしてみませんか?