MAXIMAat SIM
MAXIMA - 暇つぶし2ch112:GO MAXIMA
02/08/17 13:54
programの説明をする前に ルールを追加、 削除、 表示する方法を示す。
ぼくも この5月までrulebaseのプログラムはmaxima では 十分動かないと
錯覚していたので 経験不足でもっとうまい改変方法があるかもしれない。
userの定義したルールは rulesという配列に名前が書き込まれている。
例えば outertest4.macを読みこんだ後では
(C3) rules;
(D3) [@^RULE1, @^RULE2, @^RULE3, @^RULE4, @^RULE5, @^RULE6, @^RULE7, @^RULE8,
@^RULE9, @^RULE10, @^RULE11, @^RULE12, @^RULE13, @^RULE14, @^RULE15, @^RULE16,
@^RULE17, @^RULE18, @^RULE19, @^RULE20, @^RULE21, outersimp1, outersimp4,
outersimp2, outersimp3, outersimp5]
となっていて これの中味をインタープリタから確認したいのであるが
(C4) rules[1];としても名前が返って来るだけ。
(D4) @^RULE1
lispモードにはいってこのシンボルの属性リストを見てみる。
(C5) to_lisp();
Type (run) to restart
MAXIMA> (symbol-plist (cadr $rules))
(SYSTEM:PNAME "&@^RULE1" MPROPS
(NIL $RULE
((MEQUAL) (($@^ SIMP (6 "outertest4.mac" SRC)) 0 |$x|) 0)
RULEOF $@^))
でどうやらみれるようだ これをdisplaで受けるとインタープリタの表現が
返ってくる。
MAXIMA> (displa (symbol-plist (cadr $rules)))
(PNAME, &@^RULE1, MPROPS, (FALSE, RULE, 0 @^ x = 0, RULEOF, "@^"))
これをインタープリタから使えるようにマクロにする
MAXIMA> (defmfun $peekrule (form) (displa (symbol-plist form)))
MAXIMA>(run)
(C6) peekrule(rules[2]);
(PNAME, &@^RULE2, MPROPS, (FALSE, RULE, x @^ (y @^ z) = x @^ y @^ z, RULEOF,
"@^"))
(D6) FALSE でとりあえずの目的にはOK $peekruleはho2.lispに追加しておく
とよいだろう。tellsimpafterは 係数変数がらみの 軽いルールの定義に
使っているので インタープリタで結果をみながら手軽に付け加えたりできる。
が 付け加えたために動作がうまく行かなくなるときはとりはずさねばならな
い。これは例えば@^rule15を加えたために動かなくなったとすれば
(C10) remrule("@^","@^RULE15");
(D10) @^ とする。matchdeclareとの関連は >>92を見よ。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch