maximaメモ: 関数定義と定義の保存。

ベクトルの外積を定義してみる。

関数名をcrossとして

(%iXX)	define(cross(u,v), [u[2]*v[3]-u[3]*v[2], u[3]*v[1]-u[1]*v[3], u[1]*v[2]-u[2]*v[1]]);
(%oXX)	cross(u,v):=[u[2]*v[3]-v[2]*u[3],v[1]*u[3]-u[1]*v[3],u[1]*v[2]-v[1]*u[2]]

定義内容の表示

(%iXX)	fundef(cross);
(%oXX)	cross(u,v):=[u[2]*v[3]-v[2]*u[3],v[1]*u[3]-u[1]*v[3],u[1]*v[2]-v[1]*u[2]]

保存はサーチパスの通っているディレクトリ(maxima_userdir)下にしておけば読み込み時、ディレクトリ名が省略できる。
save()を使ってlispプログラムとして保存

save(sconcat(maxima_userdir,"/","cross_product.lisp"), cross)

あるいはmaximaプログラム(ただのテキストファイル)として保存

stringout(sconcat(maxima_userdir,"/","cross_product.wxm"), fundef(cross))

上記どちらでもload(ファイル名)で読み込める。
ファイル名の拡張子は何でも良いが、"lisp", "lsp", "mac", "mc", "wxm"のいずれかであれば読み込み時に省略できる。