Next: Garbage Collection, Previous: Program Flow, Up: Program Flow [Contents][Index]
MaximaはLispで書かれており、
Lisp関数や変数をMaximaからアクセスしたり、その逆が簡単にできます。
LispとMaximaのシンボルは命名の慣例で区別されます。
ドル記号$で始まるLispシンボルは、ドル記号なしのMaximaシンボルに対応します。
クエスチョンマーク?で始まるMaximaシンボルは、クエスチョンマークなしのLispシンボルに対応します。
例えば、MaximaシンボルfooはLispシンボル$FOOに対応し、
Maximaシンボル?fooはLispシンボルFOOに対応します。
?fooは、?とfooの間にスペースを入れずに書くことに注意してください。でないと、それはdescribe ("foo")に間違えられます。
Lispシンボルの中に、ハイフン-やアスタリスク*、他の特殊文字があれば、
Maximaのコードの中では、バックスラッシュ\でエスケープしないといけません。
例えば、Lispの識別子 *foo-bar*は、Maximaでは、?\*foo\-bar\*と書きます。
Maximaセッションの中で、Lispコードを実行できます。
特殊コマンド:lispを使って、
(1つか複数のフォームを含む)Lispの一行を実行できます。例えば、
(%i1) :lisp (foo $x $y)
は、Lisp関数fooをMaxima変数x, yを引数としてコールします。
:lisp構成子は
対話プロンプトやbatchやdemoによって処理されるファイルの中で使えますが、
load, batchload, translate_file, compile_fileが
処理するファイルの中では使えません。
関数to_lisp()を実行すると、対話的なLispセッションが始まります。
(to-maxima)を入力すると、Lispセッションを終了してMaximaに戻ります。
Lispの関数や変数を、Maximaで通常の関数名、変数名(特殊な句読点のない名前)に見せるには、
Lispの名前をドル記号$で始めなければなりません。
Maximaでは、識別子の中の大文字、小文字が区別されます。 LispとMaximaの間の名前変換を決めるルールがあります。
$fooや$FOO、$Fooはすべて
Maximaのfooに対応します。
でも、これはデフォルトで、
Lispリーダが$foo, $FOO, $Fooを
Lispシンボル$FOOに変換するからです。
|$FOO|, |$foo|はそれぞれ、Maximaのfoo, FOOに対応します。
|$Foo|はMaximaのFooに対応します。
#$Lispマクロを使うと、Maximaの式をLispコードの中で使うことができます。
#$expr$はMaximaの式exprと同値なLispの式に展開されます。
(msetq $foo #$[x, y]$)
これは以下のように入力するのと同じ効果です。
(%i1) foo: [x, y];
Lisp関数displaは、Maximaフォーマットで式を表示します。
(%i1) :lisp #$[x, y, z]$ ((MLIST SIMP) $X $Y $Z) (%i1) :lisp (displa '((MLIST SIMP) $X $Y $Z)) [x, y, z] NIL
Maximaで定義された関数は、通常のLisp関数ではありません。
Lisp関数mfuncallは、Maxima関数をコールします。
例えば:
(%i1) foo(x,y) := x*y$ (%i2) :lisp (mfuncall '$foo 'a 'b) ((MTIMES SIMP) A B)
以下のLisp関数は、Maximaパッケージの中でシャドウされています。
complement continue // float functionp array exp listen signum atan asin acos asinh acosh atanh tanh cosh sinh tan break gcd
Next: Garbage Collection, Previous: Program Flow, Up: Program Flow [Contents][Index]