Go to the first, previous, next, last section, table of contents.

### `quote_to_funargs`, `funargs_to_quote`, `remove_paren`

`quote_to_funargs(q)`
  :: quote を funarg 形式(リスト) へ.
`funargs_to_quote(f)`
  :: funarg 形式を quote へ.
`remove_paren(q)`
  :: 上の関数を用いて書かれた余分な括弧を取り去る simplifier (asir-contrib マニュアルへ: todo)

return
  quote(funargs_to_quote, remove_paren) か リスト(quote_to_funargs)
q
  quote
f
  リスト

- `quote_to_funargs` は quote 型のデータ (内部的には FNODE) を quote への復元可能な形でリストへ変換する. `quotetolist` は quote をリストへ変換するが, 一部の情報を捨てるため もとの quote の復元はできない.
- `quote_to_funargs` の戻り値は [fid, op, arg1, arg2] なる形式をしている. ここで op はなにか謎 (Todo)
- 下の例で quote_to_funargs(FA[2]); [34,[b_op,+,[internal,x],[internal,1]]] となるが, この 34 も謎 (Todo).

次の例では (x+1)+(x+2) の括弧をはずして x+1+x+2 に変換している.

    [0] ctrl("print_quote",1) $

    [1] Q=quote((x+1)+(x+2));
    [b_op,+,[u_op,(),[b_op,+,[internal,x],[internal,1]]],
            [u_op,(),[b_op,+,[internal,x],[internal,2]]]]

    [2] FA=quote_to_funargs(Q);
    [0,<...quoted...>,
      [u_op,(),[b_op,+,[internal,x],[internal,1]]],
      [u_op,(),[b_op,+,[internal,x],[internal,2]]]]

    [3] FA2=quote_to_funargs(FA[2])[1];
    [b_op,+,[internal,x],[internal,1]]

    [4] FA3=quote_to_funargs(FA[3])[1];
    [b_op,+,[internal,x],[internal,2]]

    [5] funargs_to_quote([FA[0],FA[1],FA2,FA3]);
    [b_op,+,[b_op,+,[internal,x],[internal,1]],
            [b_op,+,[internal,x],[internal,2]]]

次の例は OpenXM/asir-contrib 版の asir で実行.

    [1287] load("noro_simplify.rr");
    1
    [1293] noro_simplify.remove_paren(quote( f(1-(x))));
    quote(f(1-x))

`参照`
  @xref{quotetolist}

ChangeLog

- このマニュアルは覚え書きである. 開発者が本格的なのを書くだろう.
- これらの関数は 2004-7-8 から開発のはじまっている quote の simplification 関連 の実験的関数である. 変更をうけたソースコードは多岐にわたるのでまだ書かない.
- 括弧を取り去る問題は OpenXM/fb が蓄えている公式を tex で綺麗に表示するのが動機の一つ.
- 2004-6-26 の計算代数セミナーにおいて, 中川さんが simplifier についていろいろ問題提起 をした (計算代数セミナービデオ参照).

Go to the first, previous, next, last section, table of contents.