忘却の微分方程式(167) Maxima、lisp呼び出し、コマケー話に躓くんだ、これが。

Joseph Halfmoon

最近、別シリーズにてマイコン用のuLispをラズパイPico2上で走らせてます。COMMON LISPのサブセット的な。一方、Maxima様もCOMMON LISP上で「走っている」ハズ。もしやMaxima様の上でちょこっとLispの練習できるんじゃあ~りませんか、と思った次第。でもね、コマケー所に躓くんだ。これが。

※「忘却の微分方程式」投稿順 index はこちら

※   MaximaおよびそのGUIであるwxMaximaの以下バージョンを使用させていただいております。

wxMaximaからのLispの呼び出し

その方法については、以下の解説ページ(日本語)に記されています。

37. Program Flow

かいつまめば以下の2つの方法でMaxima様の縁の下に隠れているLispを呼び出して使役することができます。

    1. :lisp の後に続けてLispのコードを書く
    2. to_lisp(); で対話的なLispセッションを開始。作業が終わったところで (to-maxima)でセッション終了。

しかし、1も2もコマケー話なんだが引っかかるところがあるのよ。まずは1の方式。こんな感じ。wxMaximaLisp

Lispの関数を1個よびだして結果を得られているのだけれども、上の2つと下の2つで「行の色」が違うんでないかい(その差はスペース1個)? なして?

ちなみに上記のwxMaximaではなく、Maxima直で実行した場合は以下のように差はみられませぬ。MaxmiaLisp

この理由は、wxMaximaの設定を調べて行ってみつけました。ここよ。codeHilighting

wxMaximaはいろいろと「コード・ハイライティング」してくれるのですが、Lispについては上のようにデフォルトで「赤」になるようになってました。なんだそうだったのかい。ところが :lispの後にスペースを入れずにそのまま続けて書いてしまうと、wxMaximaはLispのコードだと認識できずに、「いつもの」色分けで表示してしまうみたい。まあ、スペース1個入れて書いて、なおかつ赤色でもビビらないことですなあ。

ちなみにwxMaximaから呼び出したときのLispのメモリ使用容量はこんな感じ。room

Maximaの変数名とLispの変数名

MaximaからLispの変数は見えるし、LispからもMaximaの変数は見える。ただし名前の変換規則があり、やたらとバッティングしないようになってるみたいです。詳しい規則は上の解説ページを見ていただくことにして、ちょいとやってみたところが以下に。wxMaximaVariables

Lisp側の変数 a は、Maximaからは ?a (?とaの間にスペース入れてはいけない)で参照可能。Maxima側の変数 b は、Lisp側では $b とすれば参照可能。

「Lispセッション開始」にはセミコロン必須

Maxima上で、to_lisp()という関数を実行することで Lispセッションに入れると書かれていたので、to_lisp()とやってハマリました。Lispセッションに入りきっておらず、中途半端な状態。オカシイです。

いろいろやってようやく気付きました。

to_lisp();

末尾の ; (セミコロン)必須でした。こんな感じ。

lispMode

to_lisp(); とやればLispセッションをはじめられて(その間プロンプトは MAXIMA>になります)(to-maxima)で終了です。これで出入り自由だと。大丈夫か?

忘却の微分方程式(166) Maxima、{ezunits}、単位と変換、次元解析、物理定数 へ戻る