最近、別シリーズにてマイコン用のuLispをラズパイPico2上で走らせてます。COMMON LISPのサブセット的な。一方、Maxima様もCOMMON LISP上で「走っている」ハズ。もしやMaxima様の上でちょこっとLispの練習できるんじゃあ~りませんか、と思った次第。でもね、コマケー所に躓くんだ。これが。
※「忘却の微分方程式」投稿順 index はこちら
※ MaximaおよびそのGUIであるwxMaximaの以下バージョンを使用させていただいております。
-
- wxMaxima 22.04.0
- Maxima 5.46.0(x86_64-w64-mingw32)
- SBCL 2.2.2 (SBCL = Steel Bank Common Lisp )
wxMaximaからのLispの呼び出し
その方法については、以下の解説ページ(日本語)に記されています。
かいつまめば以下の2つの方法でMaxima様の縁の下に隠れているLispを呼び出して使役することができます。
-
- :lisp の後に続けてLispのコードを書く
- to_lisp(); で対話的なLispセッションを開始。作業が終わったところで (to-maxima)でセッション終了。
しかし、1も2もコマケー話なんだが引っかかるところがあるのよ。まずは1の方式。こんな感じ。
Lispの関数を1個よびだして結果を得られているのだけれども、上の2つと下の2つで「行の色」が違うんでないかい(その差はスペース1個)? なして?
ちなみに上記のwxMaximaではなく、Maxima直で実行した場合は以下のように差はみられませぬ。
この理由は、wxMaximaの設定を調べて行ってみつけました。ここよ。
wxMaximaはいろいろと「コード・ハイライティング」してくれるのですが、Lispについては上のようにデフォルトで「赤」になるようになってました。なんだそうだったのかい。ところが :lispの後にスペースを入れずにそのまま続けて書いてしまうと、wxMaximaはLispのコードだと認識できずに、「いつもの」色分けで表示してしまうみたい。まあ、スペース1個入れて書いて、なおかつ赤色でもビビらないことですなあ。
ちなみにwxMaximaから呼び出したときのLispのメモリ使用容量はこんな感じ。
Maximaの変数名とLispの変数名
MaximaからLispの変数は見えるし、LispからもMaximaの変数は見える。ただし名前の変換規則があり、やたらとバッティングしないようになってるみたいです。詳しい規則は上の解説ページを見ていただくことにして、ちょいとやってみたところが以下に。
Lisp側の変数 a は、Maximaからは ?a (?とaの間にスペース入れてはいけない)で参照可能。Maxima側の変数 b は、Lisp側では $b とすれば参照可能。
「Lispセッション開始」にはセミコロン必須
Maxima上で、to_lisp()という関数を実行することで Lispセッションに入れると書かれていたので、to_lisp()とやってハマリました。Lispセッションに入りきっておらず、中途半端な状態。オカシイです。
いろいろやってようやく気付きました。
to_lisp();
末尾の ; (セミコロン)必須でした。こんな感じ。
to_lisp(); とやればLispセッションをはじめられて(その間プロンプトは MAXIMA>になります)(to-maxima)で終了です。これで出入り自由だと。大丈夫か?