Next: , Previous: stringproc, Up: stringproc   [Contents][Index]

79.1 Introduction to string processing

stringproc.lispは、 enlarges Maximaの文字列を扱う機能を拡大し、 ファイル入出力に関するいくつかの役立つ関数を追加します。

質問とバグに関して、van.nek at arcor.deにメールしてください。

Maximaでは、 文字列は、"text"とタイプすることで簡単に構成することができます。 stringpは文字列かテストします。

(%i1) m: "text";
(%o1)                         text
(%i2) stringp(m);
(%o2)                         true

文字は長さ1の文字列として表されます。 これらはLisp文字ではありません。 テストは charpで行うことができます。 (関連として、lcharpcunlispを使ったLisp文字からMaxima文字への変換)

(%i1) c: "e";
(%o1)                           e
(%i2) [charp(c),lcharp(c)];
(%o2)                     [true, false]
(%i3) supcase(c);
(%o3)                           E
(%i4) charp(%);
(%o4)                         true

stringproc.lispの中の、文字を返す関数すべては、Maxima文字を返します。 導入された文字が長さ1の文字列だという事実のおかげで、たくさんの文字列関数を文字にも使うことができます。 既に見たように、 supcaseは1例です。

Maxima文字列の最初の文字は位置1にあることを知ることは重要です。 これは、Maximaリストの中の最初の要素も位置1にあるという事実によって設計されています。 例えば、charatcharlistの定義を見てください。

応用として、 文字列関数はしばしばファイルを扱う時に使われます。 stringproc.lispの中に役立つストリーム関数、印字関数を見つけるでしょう。 以下の例はここで導入された関数のいくつかがいかに働くか示します。

例:

openwは、ファイルへの出力ストリームを返し、 printfは、このファイルへのフォーマットされた書き込みを可能にします。 詳細はprintfを参照してください。

(%i1) s: openw("E:/file.txt");
(%o1)                    #<output stream E:/file.txt>
(%i2) for n:0 thru 10 do printf( s, "~d ", fib(n) );
(%o2)                                done
(%i3) printf( s, "~%~d ~f ~a ~a ~f ~e ~a~%", 
              42,1.234,sqrt(2),%pi,1.0e-2,1.0e-2,1.0b-2 );
(%o3)                                false
(%i4) close(s);
(%o4)                                true

ストリームを閉じた後、今度は入力方向で再び開くことができます。 readlineは行全体を1つの文字列として返します。 現在、stringprocパッケージは 文字列を操作するたくさんの関数を提供しています。 splittokensでトークン化できます。

(%i5) s: openr("E:/file.txt");
(%o5)                     #<input stream E:/file.txt>
(%i6) readline(s);
(%o6)                     0 1 1 2 3 5 8 13 21 34 55 
(%i7) line: readline(s);
(%o7)               42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
(%i8) list: tokens(line);
(%o8)           [42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2]
(%i9) map( parse_string, list );
(%o9)            [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2]
(%i10) float(%);
(%o10) [42.0, 1.234, 1.414213562373095, 3.141592653589793, 0.01,
                                                     0.01, 0.01]
(%i11) readline(s);
(%o11)                               false
(%i12) close(s)$

ファイルの終わりに来ると、 readlinefalseを返します。

Strings ·Share packages ·Package stringproc ·

Next: , Previous: stringproc, Up: stringproc   [Contents][Index]