[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
end
, quit
:: 現在読み込み中のファイルを閉じる. トップレベルにおいてはセッションを終了することになる.
end
, quit
ともに無引数の函数であるが, ‘()’ なしで
呼び出すことができる. いずれも現在読み込み中のファイルを閉じる.
これは, トップレベルにおいてはセッションを終了させることになる.
end$
を書くのが望ましい.
[6] quit; %
load
.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
load
:: filename を読み込む.
(1|0)
ファイル名 (パス名)
cpp
を通すので, C のプログラム同様 #include
, #define
を使うことができる.
unix 版では, システムにインストールされている cpp
を利用している.
Windows 版では mcpp
http://mcpp.sourceforge.net を用いている.
これには行の長さに制限があるので注意.
unix/OpenXM 版(Mac 用 cfep/asir を含む)では OpenXM/bin/ox_cpp
を用いている.
これは Portable C compiler http://pcc.ludd.ltu.se に附属する cpp
である.
ASIRLOADPATH
に設定されているディレクトリを左から順に
サーチする. それらに該当するファイルが存在しない場合, 標準ライブラリ
ディレクトリ (あるいは環境変数 ASIR_LIBDIR
に設定されている
ディレクトリ) もサーチする.
Windows 版の場合, ASIR_LIBDIR
が設定されていない場合には,
get_rootdir()/lib
をサーチする.
end$
がないと load()
終了後にプロンプトがでないが, 実際には入力を受け付ける. しかし,
混乱を招くおそれがあるのでファイルの最後に end$
を書いておくこと
が望ましい. (end;
でもよいが, end
が返す値 0 が表示される
ため, end$
をお勧めする. )
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
which
:: 引数 filename に対し, load()
が読み込むパス名を返す.
パス名
ファイル名 (パス名) または 0
load()
がファイルをサーチする手順に従ってサーチし,
ファイルが存在する場合にはパス名を文字列として, 存在しない場合
には 0 を返す.
load()
を参照.
[0] which("gr"); ./gb/gr [1] which("/usr/local/lib/gr"); 0 [2] which("/usr/local/lib/asir/gr"); /usr/local/lib/asir/gr
load
.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
output
:: 以降の出力先を filenameまたは標準出力に切替える.
1
ファイル名
output("filename")
を実行する.
又, ファイル出力を終了し標準出力に戻りたい時には, 引数なしで
output()
を実行する.
ctrl("echo",1)
を実行した後でファイル出力に切替えれば良い.
vtype()
参照) を含まない数式のファイルへの読み書きは,
bload()
, bsave()
を使うのが, 時間, 空間ともに効率がよい.
[83] output("afo"); fctr(x^2-y^2); print("afo"); output(); 1 [87] quit; % cat afo 1 [84] [[1,1],[x+y,1],[x-y,1]] [85] afo 0 [86]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
bsave
, bload
:: filename に obj をバイナリ形式で書き込む.
:: filename から数式をバイナリ形式で読み込む.
bsave()
: 1, bload()
: 読み込んだ数式
函数形式, 未定係数を含まない任意の数式
ファイル名
bsave()
は内部形式をほぼそのままバイナリ形式でファイルに書き込む.
bload()
は, bsave()
で書き込んだ数式を読み込んで内部形式
に変換する. 現在のインプリメンテーションの制限により, 函数形式, 未定係数
(vtype()
参照) を含まないリスト, 配列などを含む任意の数式をファ
イルに保存することができる.
output()
などで保存した場合, 読み込み時にパーザが起動されるが,
bsave()
で保存したものを bload()
で読む場合, 直接
内部形式が構成できるため, 時間的, 空間的に効率がよい.
[0] A=(x+y+z+u+v+w)^20$ [1] bsave(A,"afo"); 1 [2] B = bload("afo")$ [3] A == B; 1 [4] X=(x+y)^2; x^2+2*y*x+y^2 [5] bsave(X,"afo")$ [6] quit; % asir [0] ord([y,x])$ [1] bload("afo"); y^2+2*x*y+x^2
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
bload27
:: 旧版で作られた bsave file の読み込み
読み込んだ数式
ファイル名
bsave
されたバイナリファイルはそのままでは
読み込めない. このようなファイルを読み込むために bload27
を用いる.
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
print
:: obj を表示する.
0
任意
フラグ (任意)
print();
で実行すると, 出力の後に 0 が返される.
print()$
とすれば, 最後の 0 は出力されない.
[8] def cat(L) { while ( L != [] ) { print(car(L),0); L = cdr(L);} print(""); } [9] cat([xyz,123,"gahaha"])$ xyz123gahaha
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
access
:: file の存在をテストする.
(1|0)
ファイル名
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
remove_file
:: file を消去する.
1
ファイル名
[ << ] | [ < ] | [上] | [ > ] | [ >> ] | [冒頭] | [目次] | [見出し] | [ ? ] |
open_file
, close_file
, get_line
, get_byte
, put_byte
, purge_stdin
:: filename をオープンする.
:: 識別子 num のファイルをクローズする.
:: 識別子 num のファイルから 1 行読む.
:: 識別子 num のファイルから 1 バイト読む.
:: 識別子 num のファイルに 1 バイト c を書く.
:: 標準入力のバッファをクリアする.
open_file()
: 整数 (識別子); close_file()
: 1; get_line()
: 文字列; get_byte()
, put_byte()
: 整数
ファイル名 (パス名)
文字列
非負整数 (ファイル識別子)
open_file()
はファイルをオープンする. mode 指定が
ない場合読み出し用, mode 指定がある場合には, C の標準入出力
関数 fopen()
に対するモード指定とみなす. たとえば新規書き込み
用の場合 "w"
, 末尾追加の場合 "a"
など.
成功した場合, ファイル識別子として非負整数を返す. 失敗の場合エラーとなる.
不要になったファイルは close_file()
でクローズする.
特別なファイル名 unix://stdin, unix://stdout, unix://stderr を与えると
それぞれ標準入力, 標準出力, 標準エラー出力をオープンする.
この場合モード指定は無視される.
get_line()
は現在オープンしているファイルから 1 行読み,
文字列として返す. 引数がない場合, 標準入力から 1 行読む.
get_byte()
は現在オープンしているファイルから 1 バイト読み
整数として返す.
put_byte()
は現在オープンしているファイルに 1 バイト書き,
そのバイトを整数として返す.
get_line()
が呼ばれた場合,
整数の 0 を返す.
sub_str()
などの文字列処理
関数で加工したのち eval_str()
により内部形式に変換できる.
purge_stdin()
は, 標準入力バッファを空にする.
関数内で get_line()
により標準入力から文字列を受け取る場合,
既にバッファ内に存在する文字列による誤動作を防ぐためにあらかじめ
呼び出す.
[185] Id = open_file("test"); 0 [186] get_line(Id); 12345 [187] get_line(Id); 67890 [188] get_line(Id); 0 [189] type(@@); 0 [190] close_file(Id); 1 [191] open_file("test"); 1 [192] get_line(1); 12345 [193] get_byte(1); 54 /* the ASCII code of '6' */ [194] get_line(1); 7890 /* the rest of the last line */ [195] def test() { return get_line(); } [196] def test1() { purge_stdin(); return get_line(); } [197] test(); /* a remaining newline character has been read */ /* returns immediately */ [198] test1(); 123; /* input from a keyboard */ 123; /* returned value */ [199]
[ << ] | [ < ] | [上] | [ > ] | [ >> ] |
この文書は12月 21, 2024にtexi2html 5.0を用いて生成されました。