実験的仕様の関数
********

実験的仕様の関数説明書について
===============

この説明書では Asir に導入された実験的仕様の関数について説明する. 正式な関数として導入されたものの記述は Risa/Asir マニュアルに移動される. ChangeLog の項目は www.openxm.org の cvsweb でソースコードを読む時の助けになる情報が書かれている.

実験的仕様の関数
========

quotetotex, quotetotex_env
--------------------------

quotetotex(Q)
     :: Q を latex 形式で表現した文字列に変換する.

quotetotex_env(KEY,VALUE)
     :: quotetotex の動作を制御するパラメータを変更する.

quotetotex_env()
     :: quotetotex の動作を制御するパラメータの現在値を戻す.

quotetotex_env(0)
     :: quotetotex の動作を制御するパラメータをデフォールト値に戻す.

return
     文字列(quotetotex) または リストまたはオブジェクト(quotetotex_env)

q
     quote

key
     文字列

value
     オブジェクト

  * quotetotex は Q を latex 形式で表現した文字列に変換する.

  * 以下 quotetotex_env のパラメータの意味を説明する.

  * conv_rule: 3 ビットを用いて変換ルールを指定する. 0ビット目は symbol_table による変換を行うか, 1ビット目は添字変換を行うか, 2ビット目は d から始まる変数名を微分作用素とみなして処理するか, を意味する. たとえば conv_rule として 3 を指定すると, 0ビット目, 1 ビット目が 1 となるので symbol_table による変換を行い, 添字変換をおこなう. 添字変換は数字と英字の境目および _ 記号を区切りとする. symbol_table による変換が最初に適用される. alpha, beta, 等は自動的をギリシャ文字に変換するテーブルは内蔵ずみ.

  * dp_vars_prefix: 分散表現多項式はの多項式として latex 形式に変換されるがこの x の部分を変更する.

  * dp_vars_origin: インデックスの始まりの値を指定する. デフォールトは 0.

  * dp_vars_hweyl: 分散表現多項式をワイル代数の元とみなして latex 形式に変換する. 偶数個変数があるときは 最初の半分をに後半の半分をに変換する. 奇数個の場合は最後の変数が同時化変数として h で表示される.

  * dp_dvars_prefix: dp_vars_hweyl が 1 の時に後半部分の prefix を指定する. デフォールトは $\partial$ tex

  * dp_dvars_origin: dp_vars_hweyl が 1 の時のインデックスの始まりの値.

  * conv_func: ユーザ定義の変換関数をよぶ.

     [3] quotetotex(quote(1/(x+1)));
     \frac{ 1} { (  {x}+ 1)}
     [4]  quotetotex(objtoquote(diff(x^x,x)));
        {x}^{  {x}- 1}   {x}+  \log( {x})   {x}^{ {x}}
     [5] quotetotex_env("conv_rule",3);
     [6] quotetotex(objtoquote( (alpha2beta+x_i_j)^2));
       {\alpha}_{2,\beta}^{ 2} +   2  {x}_{i,j}  {\alpha}_{2,\beta}+  {x}_{i,j}^{ 2}

参照
     objtoquote print_tex_form(contrib)

ChangeLog

  * この関数は 2004年2月末から3月にかけて asir を knoppix 版 texmacs に対応させるために書かれた. Asir-contrib の print_tex_form がその原型であり, それを効率化しまた出力形式を改善した. OpenXM/src/kxx/ox_texmacs.c, OpenXM/src/texmacs も参照.

  * OpenXM/src/asir-contrib/packages/src/noro_print.rr 1.1--1.8, noro_print_default.rr 1.1--1.3 も参照.

  * 変更を受けたファイルは OpenXM_contrib2/asir2000 の下の次のファイル. builtin/strobj.c 1.14--1.43, include/ca.h 1.46, io/cexpr.c 1.18, io/pexpr.c 1.32, io.sexpr.c 1.29, parse/arith.c 1.12, parse/parse.h 1.28--1.29, parse/quote.c 1.7--1.8, 1.12.

  * knoppix/math は 福岡大学の濱田さんが中心となり開発されている.

  * dp_dvars_prefix, *_origin は builtin/strobj.c 1.46 で導入された.

  * Todo: quotetoterminalform (分散表現多項式の見易い出力).

objtoquote
----------

objtoquote(OB)
     :: オブジェクトと quote 型のデータに変換する.

return
     quote

ob
     オブジェクト

  * objtoquote(ob) は, OB を quote 型のデータに変換する.

     [1150] quotetolist(quote(1+2));
     [b_op,+,[internal,1],[internal,2]]
     [1151] quotetolist(objtoquote(1+x));
     [b_op,+,[internal,x],[internal,1]]3

参照
     quotetotex quotetolist

ChangeLog

  * この関数は quotetotex の前処理をするために書かれた.

  * asir-contrib の関数 quote_to_quote も参照.

  * OpenXM_contrib2/asir2000/builtin/print.c 1.16.

copyright
---------

copyright()
     :: Risa/Asir の copyright 表示を文字列として戻す.

return
     文字列

  * Risa/Asir の copyright 表示を文字列として戻す.

     [1150] copyright();
     This is Risa/Asir, Version 20040312 (Kobe Distribution).
     Copyright (C) 1994-2000, all rights reserved, FUJITSU LABORATORIES LIMITED.
     Copyright 2000-2003, Risa/Asir committers, http://www.openxm.org/.
     GC 6.2(alpha6) copyright 1988-2003, H-J. Boehm, A. J. Demers, Xerox, SGI, HP.
     PARI 2.0.17, copyright 1989-1999, C. Batut, K. Belabas, D. Bernardi,
        H. Cohen and M. Olivier.

ChangeLog

  * この関数は texmacs 用に書かれた (2004-03).

  * OpenXM_contrib2/asir2000 の下の以下のファイルをみよ. builtin/miscf.c 1.21, parse/glob.c 1.47.

string_to_tb, tb_to_string, write_to_tb
---------------------------------------

string_to_tb(S)
tb_to_string(TB)
write_to_tb(S,TB)
     :: 文字列可変長配列型(text buffer)のデータの処理

return
     文字列可変長配列型(string_to_tb), 文字列型(tb_to_string)

s
     文字列

tb
     文字列可変長配列型

  * string_to_tb(S) は, 文字列 S をはじめの要素とする文字列可変長配列型オブジェクトを生成する.

  * tb_to_string_(TB) は, 文字列可変長配列型オブジェクト TB から通常の文字列オブジェクトを生成する.

  * write_to_tb(S,TB) は, 文字列 S を文字列可変長配列型オブジェクト TB へ書き出す.

  * SS を文字列変数とするとき, SS += "文字列" で SS へ文字列を書き足していくことができるが, 無駄なメモリを大量に消費する. 代りに関数 write_to_tb を用いるべきである. 文字列可変長配列型オブジェクトは文字列の可変長の配列でありメモリ管理に優しいデータ構造である.

     [219] T=string_to_tb("");

     [220] write_to_tb("Hello",T);
     0
     [221] write_to_tb(" world!",T);
     0
     [222] tb_to_string(T);
     Hello world!

ChangeLog

  * この関数は 2004-3 に print_tex_form を効率化するために書かれた.

  * OpenXM_contrib2/asir2000 の下の以下のファイルを見よ. io/ox_asir.c 1.52, builtin/strobj.c 1.12--1.13, 1.16, engine/str.c 1.5, parse/quote.c 1.9.

  * rtostr が text buffer 型のデータに関しておそかった. 速度の改善は asir2000/io/pexpr_body.c 1.2, asir2000/parse/lex.c 1.32.

dp_gr_main
----------

dp_gr_main(F | v=VV, order=OO, homo=N, matrix=M, block=B, sugarweight=SW)
     :: dp_gr_main の新しいインタフェース.

return
     リスト (グレブナ基底. 再帰表現多項式か分散表現多項式のリスト)

f
     リスト  (入力多項式系. 再帰表現多項式か分散表現多項式のリスト)

vv
     リスト  (変数のリスト)

oo
     リスト  (順序をあらわすリスト)

n
     0 か1 (homogenization をするか)

m
     順序を matrix で表現する場合 (cf. dp_ord).

b
     ???

sw
     Sugar strategy を適用するときの weight vector. 全ての要素は非負.

  * dp_gr_main(F) は, F のグレブナ基底を計算する. グレブナ基底は順序を変えるとその形が変わる.   asir ではいままで順序の指定方法が系統だっていなかった. dp_gr_main の新しいインタフェースでは順序をある文法に従い指定する.

  * 順序 order は次の文法で定義する.  {, } は 0 回以上の繰り返しを意味する.
       order         : '[' orderElement { ',' orderElement } ']'
       orderElement   :  weightVec | builtinOrder
       weightVec     : '[' weightElement { ',' weightElement } ']'
       builtiniOrder : '[' orderName  ',' setOfVariables ']'
       weightElement :   NUMBER | setOfVariables ',' NUMBER
       setOfVariables:  V | range(V,V)
       orderName    : @grlex | @glex | @lex
     ここで V は 変数名, NUMBER は整数をあわらす. 例1:  v=[x,y,z,u,v], order=[[x,10,y,5,z,1],[@grlex,range(x,v)]] は x,y,z がそれぞれ weight 10, 5, 1 をもつ順序で比較したあと, [x,y,z,u,v] についての graded reverse lexicographic order を tie-breaker として用いることを意味する. 参考書: B.Sturmfels: Gr\"obner Bases and Convex Polytopes (1995). M.Saito, B.Sturmfels, N.Takayama: Gr\"obner Deformations of Hypergeometric Differential Equations (2000).

  * 順序要素 (orderElement) の指定方法は (1) 変数名または rangeで指定された変数の集合と重みの値の繰り返し (2) 重みの値を変数リストの順番に並べる方法 (3) 変数名または rangeで指定された変数の集合と順序名の組の三通りの基礎的方法がある. 似た指定方法が Macaulay, Singular, CoCoA, Kan/sm1 等の環論システムで使用されていた. Risa/Asir の指定方法はこれらのシステムの指定方法を参考にさらに改良を加えたもので柔軟性が高い.

  * order の tie-breaker は grlex がデフォールト.

  * 分散表現多項式を引数としたときは結果も分散表現多項式として戻る. order 指定にもちいるデフォールトの変数名はこのとき x0, x1, x2, ... となる.

  * オプションの値は option_list キーワードを用いてリストで与えてもよい. 下の例を参照.

     [218] load("cyclic");
     [219] V=vars(cyclic(4));
     [c0,c1,c2,c3]
     [220]dp_gr_main(cyclic(4) | v=V, order=[[c0,10,c1,1],[c2,5],[@grlex,range(c0,c3)]]);
     [ 10 1 0 0 ]
     [ 0 0 5 0 ]
     [ R R R R ]
     [(-c3^6+c3^2)*c2^2+c3^4-1,c3^2*c2^3+c3^3*c2^2-c2-c3,
      (c3^4-1)*c1+c3^5-c3,(c2-c3)*c1+c3^4*c2^2+c3*c2-2*c3^2,-c1^2-2*c3*c1-c3^2,
      c0+c1+c2+c3]

     [1151]  F=map(dp_ptod,katsura(4), vars(katsura(4)));
     [(1)*<<1,0,0,0,0>>+(2)*<<0,1,0,0,0>>+ ... ]
     [1152] dp_gr_main(F | order=[[range(x0,x3),1]]);
     [ 1 1 1 1 0 ]
     [ R R R R R ]
     [(47774098944)*<<0,0,0,0,13>>+ ... ]

     [1153] Opt=[["v",[x,y]], ["order",[[x,5,y,1]]]];
     [[v,[x,y]],[order,[[x,5,y,1]]]]
     [1154]  dp_gr_main([x^2+y^2-1,x*y-1] | option_list=Opt);
     [ 5 1 ]
     [ R R ]
     [-y^4+y^2-1,x+y^3-y]

参照
     xyz_abc

ChangeLog

  * この関数は 2003-12 から 2004-2 の始めに大きな修正が行われた.

  * setOfVariablesの表現のために range オブジェクトが導入された.

  * グレブナ基底は順序を変えるとその形が変わる.   asir ではいままで順序の指定方法が系統だっていなかった. dp_gr_main の新しいインタフェースでは順序をある文法に従い指定する.

  * OpenXM_contrib2/asir2000 の下の次の各ファイルが修正をうけた. builtin/gr.c 1.56--1.57, builtin/dp-supp.c 1.27--1.31 (create_composite_order_spec), builtin/dp.c 1.46--1.48 (parse_gr_option), engine/Fgfs.c 1.20, engine/dist.c 1.27--1.28 engine/nd.c 1.89, include/ca.h 1.42--1.43, io/pexpr.c 1.28, io/sexpr.c 1.26, parse/arith.c 1.11, parse/glob.c 1.44-1.45, parse/lex.c 1.29, parse/parse.h 1.23--1.26

  * Todo: return キーワードで戻り値のデータを quote のリストにできるように. attribute, ring 構造体.

asir-port.sh, asir-install.sh
-----------------------------

asir-install.sh
asir-port.sh
     :: これは asir の内部コマンドではない. asir をネットワークからダウンロードかつ実行するシェルスクリプト

  * asir-port.sh は knoppix 専用である. このコマンドは asir のバイナリおよび FLL で配布できない部分を ftp.math.kobe-u.ac.jp よりダウンロードして /home/knoppix/.asir-tmp へセーブして, 実行する. .asirrc および .TeXmacs/plugins/ox/progs/init-ox.scm もダウンロードする.

  * asir-install.sh は Debian GNU Linux / openxm-binary*.deb 専用である. asir-install.sh は asir をダウンロードして /usr/local/OpenXM/bin および /usr/local/OpenXM/lib/asir へインストールする.

ChangeLog

  * これらのシェルスクリプトは knoppix/math のために 2004/2, 3 月に書かれた.

  * knoppix/math は福岡大学の濱田さんが中心となり開発されている.

  * OpenXM/misc/packages/Linux/Debian の下の全てのファイル (2004-2-22 から 2004-3 の末まで). ( ~taka/this03/misc-2003/A3/knoppix-03-05 (プライベートファイル) も見よ.) OpenXM/src/asir-port の下の次の各ファイル. Makefile 1.1--1.8, asir-install.sh 1.1--1.2, asir-port.sh 1.1--1.6.

get_struct_name, get_element_names, get_element_at, put_element_at
------------------------------------------------------------------

get_struct_name(S)
get_element_names(S)
get_element_at(S,KEY)
put_element_at(S,KEY,OBJ)
     :: 構造体 S に対する操作

return
     文字列 (get_struct_name), 文字列のリスト (get_element_names), オブジェクト (get_element_at), オブジェクト (put_element_at)

s
     構造体

key
     文字列

obj
     オブジェクト

  * get_struct_name(s) は, 構造体 S の名前を戻す.

  * get_element_names(s) は, 構造体のメンバーの名前のリストを戻す.

  * get_element_at(s,key) は構造体 s のメンバー key の値を戻す.

  * put_element_at(s,key,obj) は構造体 s のメンバー key の値を obj に設定する.

     [219]  struct point { x, y, color};
     [220]  P = newstruct(point);
     {0,0,0}
     [221]  P->x = 10$ P->y=5$ P->color="red"$
     [222]  get_element_names(P);
     [x,y,color]
     [223] put_element_at(P,"color","blue");
     blue
     [224] P->color;
     bule

参照
     newstruct, struct

ChangeLog

  * 構造体の定義を知らずに構造体を扱うユーザ関数を書くときに便利. asir-contrib の noro_print.rr を見よ.

  * OpenXM_contrib2/asir2000/builtin/compobj.c 1.8.

dp_weyl_gr_main
---------------

dp_weyl_gr_main(F | v=VV, order=OO, homo=N, matrix=M, block=B, sugarweight=SW)
     :: dp_weyl_gr_main の新しいインタフェース.  dp_gr_main と同じ形式である.

return
     リスト (グレブナ基底. 再帰表現多項式か分散表現多項式のリスト)

f
     リスト  (入力多項式系. 再帰表現多項式か分散表現多項式のリスト)

vv
     リスト  (変数のリスト)

oo
     リスト  (順序をあらわすリスト)

n
     0 か1 (homogenization をするか). [テストまだ]

m
     順序を matrix で表現する場合 (cf. dp_ord). [テストまだ]

b
     ???

sw
     Sugar strategy を適用するときの weight vector. 全ての要素は非負. [テストまだ]

  * dp_weyl_gr_main(F) は, F のグレブナ基底を計算する. グレブナ基底は順序を変えるとその形が変わる.   asir ではいままで順序の指定方法が系統だっていなかった. dp_weyl_gr_main の新しいインタフェースでは順序をある文法に従い指定する. 指定方法については dp_gr_main のマニュアルを参照.

  * 分散表現多項式の各モノミアルの長さが偶数のときはワイル代数 K[x_1, ..., x_n, d_1, ..., d_n] で計算がおこなわれる. ワイル代数では x_i と d_i は非可換な掛け算規則 d_i x_i = x_i d_i +1 をみたし, x_i と x_j や d_i と d_j は可換である. また i と j が異なる場合は x_i と d_j も可換である.

  * 分散表現多項式の各モノミアルの長さが奇数のときは同次化ワイル代数 K[x_1, ..., x_n, d_1, ..., d_n, h] で計算がおこなわれる. 同次化ワイル代数では x_i と d_i は非可換な掛け算規則 d_i x_i = x_i d_i + h^2 をみたし, h は任意の元と可換, その他の変数もワイル代数と同様な可換性の規則をみたす. 詳しくは dp_gr_main で参照した Saito, Sturmfels, Takayama の教科書をみよ.

     [1220] F=sm1.gkz([ [[1,1,1,1],[0,1,3,4]], [0,0]]);  /* Command in asir-contrib*/
     [[x4*dx4+x3*dx3+x2*dx2+x1*dx1,4*x4*dx4+3*x3*dx3+x2*dx2,-dx1*dx4+dx2*dx3,-dx2^2*dx4+dx1*dx3^2,dx1^2*dx3-dx2^3,-dx2*dx4^2+dx3^3],[x1,x2,x3,x4]]
     [1221] V=[x1,x2,x3,x4,dx1,dx2,dx3,dx4]$
     [1222] dp_weyl_gr_main(F[0] | v=V, order=[[dx1,1,dx2,1,dx3,1,dx4,1]]);
     ...
     [1238] FF=map(dp_ptod,F[0],V);
     [(1)*<<1,0,0,0,1,0,0,0>>+(1)*<<0,1,0,0,0,1,0,0>>+(1)*<<0,0,1,0,0,0,1,0>>+(1)*<<0,0,0,1,0,0,0,1>>,(1)*<<0,1,0,0,0,1,0,0>>+(3)*<<0,0,1,0,0,0,1,0>>+(4)*<<0,0,0,1,0,0,0,1>>,0,0,0,0]

     [1244] FF=map(dp_ptod,F[0],V);
     [(1)*<<1,0,0,0,1,0,0,0>>+(1)*<<0,1,0,0,0,1,0,0>>+(1)*<<0,0,1,0,0,0,1,0>>+(1)*<<0,0,0,1,0,0,0,1>>,(1)*<<0,1,0,0,0,1,0,0>>+(3)*<<0,0,1,0,0,0,1,0>>+(4)*<<0,0,0,1,0,0,0,1>>,(1)*<<0,0,0,0,0,1,1,0>>+(-1)*<<0,0,0,0,1,0,0,1>>,(1)*<<0,0,0,0,1,0,2,0>>+(-1)*<<0,0,0,0,0,2,0,1>>,(-1)*<<0,0,0,0,0,3,0,0>>+(1)*<<0,0,0,0,2,0,1,0>>,(1)*<<0,0,0,0,0,0,3,0>>+(-1)*<<0,0,0,0,0,1,0,2>>]

     dp_weyl_gr_main(FF | v=V, order=[[0,0,0,0,1,1,1,1]]);

     [1246] dp_weyl_gr_main(FF | v=V, order=[[dx1,1,dx2,1,dx3,1,dx4,1]]);
     [ 0 0 0 0 1 1 1 1 ]
     [ R R R R R R R R ]
      ...

参照
     dp_gr_main

ChangeLog

  * dp_gr_main のインタフェースが dp_weyl_gr_main へも導入された.

  * OpenXM_contrib2/asir2000 の下の次の各ファイルが修正をうけた. builtin/dp-supp.c 1.32--1.33 builtin/dp.c 1.49--1.50

dp_initial_term
---------------

dp_initial_term(F | v=VV, order=OO)
     :: dp_initial_term は与えられた weight に対する先頭項の和を戻す.

return
     分散表現多項式または分散表現多項式のリスト.

f
     分散表現多項式か分散表現多項式のリスト.

vv
     リスト  (変数のリスト)

oo
     リスト  (順序をあらわすリスト)

  * dp_initial_term は与えられた weight w に対する先頭項の和を戻す. これは多くの教科書で $\rm in_w(f)$ tex と書かれている.

  * 順序を表すリストは dp_gr_main で定義した文法に従う. このリストの先頭が weight vector で無い場合はエラーとなる. たとえば order=[[@lex,...]] はエラーとなる.

  * 結果は与えられた順序に関してソートされてるわけではない.

     [1220] F=<<2,0,0>>+<<1,1,0>>+<<0,0,1>>;
     (1)*<<2,0,0>>+(1)*<<1,1,0>>+(1)*<<0,0,1>>
     [1220] dp_initial_term(F | order=[[1,1,1]]);
     [ 1 1 1 ]
     [ R R R ]
     (1)*<<2,0,0>>+(1)*<<1,1,0>>
     [1221] dp_initial_term(F | v=[x,y,z], order=[[x,1]]);
     [ 1 0 0 ]
     [ R R R ]
     (1)*<<2,0,0>>

参照
     dp_gr_main, dp_weyl_gr_main, dp_order, dp_hm

ChangeLog

  * OpenXM_contrib2/asir2000 の下の次の各ファイルが修正をうけた. builtin/dp-supp.c 1.32 builtin/dp.c 1.49

dp_order
--------

dp_order(F | v=VV, order=OO)
     :: dp_order は与えられた weight に対する次数の最大値を戻す.

return
     数か数のリスト

f
     分散表現多項式か分散表現多項式のリスト.

vv
     リスト  (変数のリスト)

oo
     リスト  (順序をあらわすリスト)

  * 順序を表すリストは dp_gr_main で定義した文法に従う. このリストの先頭が weight vector で無い場合はエラーとなる. たとえば order=[[@lex,...]] はエラーとなる.

  * dp_order は与えられた weight w に対する次数の最大値を戻す. これを $\rm ord_w(f)$ tex と書く論文や教科書もある.

  * 引数がリストの場合各要素の次数が計算される.

     [1220] F=<<2,0,0>>+<<1,1,0>>+<<0,0,1>>;
     (1)*<<2,0,0>>+(1)*<<1,1,0>>+(1)*<<0,0,1>>
     [1222] dp_order(F | order=[[1,1,1]]);
     [ 1 1 1 ]
     [ R R R ]
     2
     [1223] dp_order(F | v=[x,y,z], order=[[x,1]]);
     [ 1 0 0 ]
     [ R R R ]

参照
     dp_gr_main, dp_weyl_gr_main, dp_initial_term, dp_hm

ChangeLog

  * OpenXM_contrib2/asir2000 の下の次の各ファイルが修正をうけた. builtin/dp-supp.c 1.32 builtin/dp.c 1.49

mapat
-----

mapat(FNAME,POS[,ARG0, ARG1, ...])
     :: POS に対する map 関数

return
     オブジェクト

pos
     整数

arg0, arg1, arg2, ...
     オブジェクト

  * map 関数は 0 番目の引数に対してしか動作しないが, mapat 関数は指定した番号の引数に対して map 関数を実行する.

  * mapat(fname,0,A0,A1,...) は map(fname,A0,A1,...) に等価である.

  * 次の副作用がある. まだ書いてない.

     [219] mapat(deg,1,x^2+y^3+x+y,[x,y]);
     [2,3]
     [220] mapat(subst,1,x+y+z,[x,y,z],2);
     [y+z+2,x+z+2,x+y+2]

参照
     map

ChangeLog

  * この関数は 2004-6-22 にコミットされた. 変更をうけたソースコードは builtin/pf.c, subst.c である.

list
----

list([ARG0, ARG1, ...])
     :: list を生成する.

return
     リスト

arg0, arg1, arg2, ...
     オブジェクト

  * ARG0, ARG1, ... を要素とするリストを生成する.

     [219] list(1,2,3);
     [1,2,3]
     [220] list(1,2,[3,4]);
     [1,2,[3,4]]

参照
     cons

ChangeLog

  * この関数は 2004-6-22 にコミットされた. 変更をうけたソースコードは builtin/list.c である.

set_print_function
------------------

set_print_function([FNAME])
     :: 画面表示用の関数を登録

return
     整数

fname
     文字列

  * set_print_function は fname(F) を通常の画面表示関数の代わりによぶ.
     引数がない場合は画面表示関数をデフォールトへ戻す.
     Asir-contrib はこの関数を用いて出力関数を Asir-contrib 用に変更している.

     [219] def my_output(F) {
                print("Out: ",0); print(rtostr(F));
           }
     [220] set_print_function("my_output");
     Out: 0
     [221]  1+2;
     Out: 3

参照
     rtostr

ChangeLog

  * この関数は 2001-9-4 に asir-contrib のために導入された. 変更をうけたソースコードは builtin/print.c 1.11 である.

xyz_pqr, syz_stu
----------------

xyz_pqr(ARG1,ARG2[,FLAG])
xyz_stu(ARG1,ARG2)
     :: xyz に関する操作.

return
     整数

arg1, arg2
     整数

flag
     0 または 1

  * この項目は新しい関数の説明を書くためのテンプレートである. 消すな.

  * xyz_pqr() は, ARG1, ARG2 を pqr する.

  * FLAG が 0 でないとき, モジュラ計算を行う.

  * xyz_stu() は stu アルゴリズムを用いる.

     [219] xyz_pqr(1,2);
     3
     [220] xyz_pqr(1,2,1);
     3
     0
     [221] xyz_stu(1,2);
     3

参照
     xyz_abc

ChangeLog

  * この関数は 2004-3-1 から 2004-3-14 にかけて アルゴリズム xyz (論文 http://www.afo.org/xyz.pdf ) を用いて書き直された. 変更をうけたソースコードは xxxyy.rr, ppp.c である.

  * この関数は 2000 頃にはじめてのバージョンが書かれた. ソースは ppp.c である.