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]