04/08/29 23:44
>>411
ええっと このへんは 次のように考えてください。
MAXIMA言語で定義された関数は コンパイルしない限り
シンボルの属性としてしまわれます。今の関数なら
(%i10) :lisp (symbol-plist '$|f|)
(MPROPS (NIL MEXPR ((LAMBDA) ((MLIST) $x) ((MTIMES) ((%COS) $x) (($EXP) $x)))))
従ってこれを属性として取り出して 実行するマクロmfunction-callを使って
実行しなければなりません。
(%i10) :lisp (mfunction-call $|f| 1.2)
1.203070112722819
(%i10) f(1.2);
(%o10) 1.203070112722819 で同じ実行であることが
解ります。
もしコンパイルした後では $|f|は LISPの関数に格上げされているのでこの実行は
($|f| 1.2)
としなくてはいけません。mAXIMAのコンパイラは時々両者をとりちがえてしまい、
コンパイルしたコードが動かないことがあることも覚えておくとよいでしょう。