Next: Functions and Variables for input and output, Previous: stringproc, Up: stringproc [Contents][Index]
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
で行うことができます。
(関連として、lcharp
と
cunlisp
を使った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にあるという事実によって設計されています。
例えば、charat
やcharlist
の定義を見てください。
応用として、
文字列関数はしばしばファイルを扱う時に使われます。
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
パッケージは
文字列を操作するたくさんの関数を提供しています。
split
やtokens
でトークン化できます。
(%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)$
ファイルの終わりに来ると、
readline
はfalse
を返します。
Next: Functions and Variables for input and output, Previous: stringproc, Up: stringproc [Contents][Index]