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 へ.
get_function_name(f)
:: funarg 形式の op を文字列へ.
remove_paren(q)
:: 上の関数を用いて書かれた余分な括弧を取り去る simplifier (asir-contrib マニュアルへ: todo)
return
quote(funargs_to_quote, remove_paren) か リスト(quote_to_funargs)
q
quote
f
リスト

次の例では (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))

funargs_to_quote を用いて既存の quote の子供を置き換えて 新しい quote をつくり出せる.

[1184] R=quote_to_funargs(quote(a+(b+c)));
[0,<...quoted...>,<...quoted...>,<...quoted...>]
[1185] T=quote_to_funargs(quote(1+2));
[0,<...quoted...>,<...quoted...>,<...quoted...>]
[1186] funargs_to_quote([0,R[1],R[2],T[2]]);
quote(a+1)
参照
@xref{quotetolist}

ChangeLog


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