Examples cleanup
[maxima.git] / doc / info / ja / stringproc.texi
blob1709a90a4170621a7ce9d7290472caddb538e4ed
1 @menu
2 * Introduction to string processing::
3 * Functions and Variables for input and output::
4 * Functions and Variables for characters::
5 * Functions and Variables for strings::
6 @end menu
8 @node Introduction to string processing, Functions and Variables for input and output, stringproc, stringproc
9 @section Introduction to string processing
11 @code{stringproc.lisp}は、
12  enlarges 
13 Maximaの文字列を扱う機能を拡大し、
14 ファイル入出力に関するいくつかの役立つ関数を追加します。
16 質問とバグに関して、van.nek at arcor.deにメールしてください。
18 Maximaでは、
19 文字列は、"text"とタイプすることで簡単に構成することができます。
20 @code{stringp}は文字列かテストします。
22 @c ===beg===
23 @c m: "text";
24 @c stringp(m);
25 @c ===end===
26 @example
27 (%i1) m: "text";
28 (%o1)                         text
29 (%i2) stringp(m);
30 (%o2)                         true
31 @end example
33 文字は長さ1の文字列として表されます。
34 これらはLisp文字ではありません。
35 テストは
36 @code{charp}で行うことができます。
37 (関連として、@code{lcharp}と
38 @code{cunlisp}を使ったLisp文字からMaxima文字への変換)
41 @c ===beg===
42 @c c: "e";
43 @c [charp(c),lcharp(c)];
44 @c supcase(c);
45 @c charp(%);
46 @c ===end===
47 @example
48 (%i1) c: "e";
49 (%o1)                           e
50 (%i2) [charp(c),lcharp(c)];
51 (%o2)                     [true, false]
52 (%i3) supcase(c);
53 (%o3)                           E
54 (%i4) charp(%);
55 (%o4)                         true
56 @end example
58 @code{stringproc.lisp}の中の、文字を返す関数すべては、Maxima文字を返します。
59 導入された文字が長さ1の文字列だという事実のおかげで、たくさんの文字列関数を文字にも使うことができます。
60 既に見たように、
61 @code{supcase}は1例です。
63 Maxima文字列の最初の文字は位置1にあることを知ることは重要です。
64 これは、Maximaリストの中の最初の要素も位置1にあるという事実によって設計されています。
65 例えば、@code{charat}や@code{charlist}の定義を見てください。
67 応用として、
68 文字列関数はしばしばファイルを扱う時に使われます。
69 @code{stringproc.lisp}の中に役立つストリーム関数、印字関数を見つけるでしょう。
70 以下の例はここで導入された関数のいくつかがいかに働くか示します。
72 例: 
74 @code{openw}は、ファイルへの出力ストリームを返し、
75 @code{printf}は、このファイルへのフォーマットされた書き込みを可能にします。
76 詳細は@code{printf}を参照してください。
78 @example
79 (%i1) s: openw("E:/file.txt");
80 (%o1)                    #<output stream E:/file.txt>
81 (%i2) for n:0 thru 10 do printf( s, "~d ", fib(n) );
82 (%o2)                                done
83 (%i3) printf( s, "~%~d ~f ~a ~a ~f ~e ~a~%", 
84               42,1.234,sqrt(2),%pi,1.0e-2,1.0e-2,1.0b-2 );
85 (%o3)                                false
86 (%i4) close(s);
87 (%o4)                                true
88 @end example
90 ストリームを閉じた後、今度は入力方向で再び開くことができます。
91 @code{readline}は行全体を1つの文字列として返します。
92 現在、@code{stringproc}パッケージは
93 文字列を操作するたくさんの関数を提供しています。
94 @code{split}や@code{tokens}でトークン化できます。
96 @example
97 (%i5) s: openr("E:/file.txt");
98 (%o5)                     #<input stream E:/file.txt>
99 (%i6) readline(s);
100 (%o6)                     0 1 1 2 3 5 8 13 21 34 55 
101 (%i7) line: readline(s);
102 (%o7)               42 1.234 sqrt(2) %pi 0.01 1.0E-2 1.0b-2
103 (%i8) list: tokens(line);
104 (%o8)           [42, 1.234, sqrt(2), %pi, 0.01, 1.0E-2, 1.0b-2]
105 (%i9) map( parse_string, list );
106 (%o9)            [42, 1.234, sqrt(2), %pi, 0.01, 0.01, 1.0b-2]
107 (%i10) float(%);
108 (%o10) [42.0, 1.234, 1.414213562373095, 3.141592653589793, 0.01,
109                                                      0.01, 0.01]
110 (%i11) readline(s);
111 (%o11)                               false
112 (%i12) close(s)$
113 @end example
115 ファイルの終わりに来ると、
116 @code{readline}は@code{false}を返します。
118 @opencatbox
119 @category{Strings} @category{Share packages} @category{Package stringproc}
120 @closecatbox
123 @node Functions and Variables for input and output, Functions and Variables for characters, Introduction to string processing, stringproc
124 @section Functions and Variables for input and output
126 例: 
128 @c ===beg===
129 @c s: openw("E:/file.txt");
130 @c control: 
131 @c  "~2tAn atom: ~20t~a~%~2tand a list: ~20t~@{~r ~@}~%~2tand an integer: ~20t~d~%"$
132 @c printf( s,control, 'true,[1,2,3],42 )$
133 @c close(s);
134 @c s: openr("E:/file.txt");
135 @c while stringp( tmp:readline(s) ) do print(tmp)$
136 @c close(s)$
137 @c ===end===
138 @example
139 (%i1) s: openw("E:/file.txt");
140 (%o1)                     #<output stream E:/file.txt>
141 (%i2) control: 
142 "~2tAn atom: ~20t~a~%~2tand a list: ~20t~@{~r ~@}~%~2t\
143 and an integer: ~20t~d~%"$
144 (%i3) printf( s,control, 'true,[1,2,3],42 )$
145 (%o3)                                false
146 (%i4) close(s);
147 (%o4)                                true
148 (%i5) s: openr("E:/file.txt");
149 (%o5)                     #<input stream E:/file.txt>
150 (%i6) while stringp( tmp:readline(s) ) do print(tmp)$
151   An atom:          true 
152   and a list:       one two three  
153   and an integer:   42 
154 (%i7) close(s)$
155 @end example
157 @deffn {関数} close (@var{stream}) 
158 @var{stream}を閉じて、
159 もし@var{stream}が開いていたら
160 @code{true}を返します。
162 @opencatbox
163 @category{File input} @category{File output} @category{Package stringproc}
164 @closecatbox
166 @end deffn
168 @deffn {関数} flength (@var{stream})
169 @var{stream}の中の要素の数を返します。
171 @opencatbox
172 @category{File input} @category{File output} @category{Package stringproc}
173 @closecatbox
175 @end deffn
177 @deffn {関数} fposition (@var{stream})
178 @deffnx {関数} fposition (@var{stream}, @var{pos})
179 もし@var{pos}が使われてないなら、
180 @var{stream}の中の現在位置を返します。
181 もし@var{pos}が使われているなら、
182 @code{fposition}は@var{stream}の中の位置を設定します。
183 @var{pos}は正の数でなければいけません。
184 @var{stream}の最初の要素は位置1にあります。
186 @opencatbox
187 @category{File input} @category{File output} @category{Package stringproc}
188 @closecatbox
190 @end deffn
192 @deffn {関数} freshline () 
193 @deffnx {関数} freshline (@var{stream}) 
194 もし位置が行の最初でないなら
195 (@var{stream}に)改行を書きます。
196 @code{newline}も参照してください。
198 @opencatbox
199 @category{File output} @category{Package stringproc}
200 @closecatbox
202 @end deffn
204 @deffn {関数} newline () 
205 @deffnx {関数} newline (@var{stream}) 
206 (@var{stream}に)改行を書きます。
207 @code{newline()}の使用の例に関しては、
208 @code{sprint}を参照してください。
209 @code{newline()}が期待通りに動かない
210 いくつかの場合があることに注意してください。
212 @opencatbox
213 @category{File output} @category{Package stringproc}
214 @closecatbox
216 @end deffn
218 @deffn {関数} opena (@var{file}) 
219 @var{file}への出力ストリームを返します。
220 もし存在しているファイルを開いたら、
221 @code{opena}はファイルの終わりに要素を追加します。
223 @opencatbox
224 @category{File output} @category{Package stringproc}
225 @closecatbox
227 @end deffn
229 @deffn {関数} openr (@var{file}) 
230 @var{file}への入力ストリームを返します。
231 もし@var{file}が存在しないなら、生成されます。
233 @opencatbox
234 @category{File input} @category{Package stringproc}
235 @closecatbox
237 @end deffn
239 @deffn {関数} openw (@var{file}) 
240 @var{file}への出力ストリームを返します。
241 もし@var{file}が存在しないなら、生成されます。
242 もし存在しているファイルを開いたら、@code{openw}は
243 @var{file}を破壊的に変更します。
245 @opencatbox
246 @category{File output} @category{Package stringproc}
247 @closecatbox
249 @end deffn
251 @deffn {関数} printf (@var{dest}, @var{string})
252 @deffnx {関数} printf (@var{dest}, @var{string}, @var{expr_1}, ..., @var{expr_n})
253 Common Lisp関数FORMATをMaximaで利用可能にします。
254 (gcl.infoから:
255 「フォーマットは
256 制御文字列の文字を出力し、波形記号がディレクティブを挿入することを守ることで、
257 フォーマットされた出力を生成します。
258 波形記号の後の文字は多分、前置パラメータと修飾語が先行し、
259 望まれるフォーマットの種類を指定します。
260 ほとんどのディレクティブは、出力を生成するために1つまたは複数の引数を使います。」)
262 以下の記述と例は@code{printf}を使うアイデアを与えるかもしれません。
263 さらなる情報に関して、Lisp参考文献を参照してください。
265 @example
266    ~%       改行
267    ~&       行のフレッシュ
268    ~t       タブ
269    ~$       通貨記号
270    ~d       10進整数
271    ~b       2進整数
272    ~o       8進整数
273    ~x       16進整数
274    ~br      b進整数
275    ~r       整数を一字一字
276    ~p       複数形
277    ~f       浮動小数点
278    ~e       科学的記数法
279    ~g       大きさに応じて~fまたは~e
280    ~h       多倍長浮動小数点
281    ~a       Maxima関数文字列を使う
282    ~s       ~aと同様, しかし"ダブルコーテーション"で囲まれた出力
283    ~~       ~
284    ~<       行揃え, ~> 終端
285    ~(       大文字小文字変換, ~) 終端
286    ~[       選択, ~] 終端
287    ~@{       繰り返し, ~@} 終端
288 @end example
290 選択ディレクティブ@code{~[}は添字がゼロから始まることに注意してください。
291 ディレクティブ~*がサポートされていないことにも注意してください。
293 @c ===beg===
294 @c printf( false, "~a ~a ~4f ~a ~@@r", 
295 @c         "String",sym,bound,sqrt(12),144), bound = 1.234;
296 @c printf( false,"~@{~a ~@}",["one",2,"THREE"] );
297 @c printf( true,"~@{~@{~9,1f ~@}~%~@}",mat ),
298 @c         mat = args( matrix([1.1,2,3.33],[4,5,6],[7,8.88,9]) )$
299 @c control: "~:(~r~) bird~p ~[is~;are~] singing."$
300 @c printf( false,control, n,n,if n=1 then 0 else 1 ), n=2;
301 @c ===end===
302 @example
303 (%i1) printf( false, "~a ~a ~4f ~a ~@@r", 
304               "String",sym,bound,sqrt(12),144), bound = 1.234;
305 (%o1)                 String sym 1.23 2*sqrt(3) CXLIV
306 (%i2) printf( false,"~@{~a ~@}",["one",2,"THREE"] );
307 (%o2)                          one 2 THREE 
308 (%i3) printf(true,"~@{~@{~9,1f ~@}~%~@}",mat ),
309           mat = args(matrix([1.1,2,3.33],[4,5,6],[7,8.88,9]))$
310       1.1       2.0       3.3 
311       4.0       5.0       6.0 
312       7.0       8.9       9.0 
313 (%i4) control: "~:(~r~) bird~p ~[is~;are~] singing."$
314 (%i5) printf( false,control, n,n,if n=1 then 0 else 1 ), n=2;
315 (%o5)                    Two birds are singing.
316 @end example
318 もし@var{dest}がストリームか@code{true}なら、
319 @code{printf}は@code{false}を返します。
320 そうでないなら、@code{printf}は出力を含む文字列を返します。
322 @opencatbox
323 @category{File output} @category{Package stringproc}
324 @closecatbox
326 @end deffn
328 @deffn {関数} readline (@var{stream}) 
329 @var{stream}の現在位置から行の終わりまでの文字を含む文字列か、
330 もしファイルの終わりが来たら@var{false}を返します。
332 @opencatbox
333 @category{File input} @category{Package stringproc}
334 @closecatbox
336 @end deffn
338 @c -----------------------------------------------------------------------------
339 @anchor{sprint}
340 @deffn {関数} sprint (@var{expr_1}, @dots{}, @var{expr_n})
342 引数を順に評価し、一番左から始まる「一行」に表示します。
343 数は数の右隣に'-'と共に印字され、行の長さを無視します。
344 もし中間行ブレークを置きたいなら、
345 @code{newline()}―@code{stringproc.lisp} から自動ロードされます―
346 が役に立つかもしれません。
348 例:
350 @c ===beg===
351 @c for n:0 thru 19 do sprint( fib(n) )$
352 @c for n:0 thru 22 do ( 
353 @c    sprint(fib(n)), if mod(n,10)=9 then newline() )$
354 @c ===end===
355 @example
356 (%i1) for n:0 thru 19 do sprint( fib(n) )$
357 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
358 (%i2) for n:0 thru 22 do ( 
359          sprint(fib(n)), if mod(n,10)=9 then newline() )$
360 0 1 1 2 3 5 8 13 21 34 
361 55 89 144 233 377 610 987 1597 2584 4181 
362 6765 10946 17711 
363 @end example
365 @opencatbox
366 @category{Package stringproc}
367 @closecatbox
368 @end deffn
370 @node Functions and Variables for characters, Functions and Variables for strings, Functions and Variables for input and output, stringproc
371 @section Functions and Variables for characters
373 @deffn {関数} alphacharp (@var{char})    
374 もし@var{char}がアルファベット文字なら@code{true}を返します。
376 @opencatbox
377 @category{Predicate functions} @category{Package stringproc}
378 @closecatbox
380 @end deffn
382 @deffn {関数} alphanumericp (@var{char}) 
383 もし@var{char}がアルファベット文字か数字なら@code{true}を返します。
385 @opencatbox
386 @category{Predicate functions} @category{Package stringproc}
387 @closecatbox
389 @end deffn
391 @deffn {関数} ascii (@var{int}) 
392 ASCIIコード@var{int}( -1 < int < 256 )に対応する文字を返します。
394 @c ===beg===
395 @c for n from 0 thru 255 do ( 
396 @c    tmp: ascii(n), if alphacharp(tmp) then sprint(tmp), 
397 @c       if n=96 then newline() )$
398 @c ===end===
399 @example
400 (%i1) for n from 0 thru 255 do ( 
401    tmp: ascii(n), if alphacharp(tmp) then sprint(tmp),
402       if n=96 then newline() )$
403 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 
404 a b c d e f g h i j k l m n o p q r s t u v w x y z
405 @end example
407 @opencatbox
408 @category{Package stringproc}
409 @closecatbox
411 @end deffn
413 @deffn {関数} cequal (@var{char_1}, @var{char_2})          
414 もし@var{char_1}と@var{char_2}が同じなら@code{true}を返します。
416 @opencatbox
417 @category{Predicate functions} @category{Package stringproc}
418 @closecatbox
420 @end deffn
422 @deffn {関数} cequalignore (@var{char_1}, @var{char_2})    
423 @code{cequal}と同様ですが、文字の大小を無視します。
425 @opencatbox
426 @category{Predicate functions} @category{Package stringproc}
427 @closecatbox
429 @end deffn
431 @deffn {関数} cgreaterp (@var{char_1}, @var{char_2})       
432 もし@var{char_1}のASCIIコードが@var{char_2}のそれより大きいなら@code{true}を返します。
434 @opencatbox
435 @category{Predicate functions} @category{Package stringproc}
436 @closecatbox
438 @end deffn
440 @deffn {関数} cgreaterpignore (@var{char_1}, @var{char_2})
441 @code{cgreaterp}と同様ですが、文字の大小を無視します。
443 @opencatbox
444 @category{Predicate functions} @category{Package stringproc}
445 @closecatbox
447 @end deffn
449 @deffn {関数} charp (@var{obj}) 
450 もし@var{obj}がMaxima-文字なら@code{true}を返します。
451 例えばイントロダクションを参照してください。
453 @opencatbox
454 @category{Predicate functions} @category{Package stringproc}
455 @closecatbox
457 @end deffn
459 @deffn {関数} cint (@var{char}) 
460 @var{char}のASCIIコードを返します。
462 @opencatbox
463 @category{Package stringproc}
464 @closecatbox
466 @end deffn
468 @deffn {関数} clessp (@var{char_1}, @var{char_2})
469 もし@var{char_1}のASCIIコードが@var{char_2}のそれより小さいなら@code{true}を返します。
471 @opencatbox
472 @category{Predicate functions} @category{Package stringproc}
473 @closecatbox
475 @end deffn
477 @deffn {関数} clesspignore (@var{char_1}, @var{char_2})
478 @code{clessp}と同様ですが、文字の大小を無視します。
480 @opencatbox
481 @category{Predicate functions} @category{Package stringproc}
482 @closecatbox
484 @end deffn
486 @deffn {関数} constituent (@var{char})   
487 もし@var{char}がグラフィック文字であり、スペース文字でないなら、
488 @code{true}を返します。
489 グラフィック文字は見ることができる文字とスペース文字です。
490 (@code{constituent}は、Paul Graham, ANSI Common Lisp, 1996, page 67で定義されています。)
492 @c ===beg===
493 @c for n from 0 thru 255 do ( 
494 @c    tmp: ascii(n), if constituent(tmp) then sprint(tmp) )$
495 @c ===end===
496 @example
497 (%i1) for n from 0 thru 255 do ( 
498 tmp: ascii(n), if constituent(tmp) then sprint(tmp) )$
499 ! " #  %  ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @@ A B
500 C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c
501 d e f g h i j k l m n o p q r s t u v w x y z @{ | @} ~
502 @end example
504 @opencatbox
505 @category{Predicate functions} @category{Package stringproc}
506 @closecatbox
508 @end deffn
510 @deffn {関数} cunlisp (@var{lisp_char}) 
511 Lisp文字をMaxima文字に変換します。
512 (必要としないでしょう。)
514 @opencatbox
515 @category{Package stringproc}
516 @closecatbox
518 @end deffn
520 @deffn {関数} digitcharp (@var{char})    
521 もし@var{char}が0から9までの数字なら、
522 @code{true}を返します。
524 @opencatbox
525 @category{Predicate functions} @category{Package stringproc}
526 @closecatbox
528 @end deffn
530 @deffn {関数} lcharp (@var{obj}) 
531 もし @var{obj}がLisp文字なら、@code{true}を返します。
532 (必要としないでしょう。)
534 @opencatbox
535 @category{Predicate functions} @category{Package stringproc}
536 @closecatbox
538 @end deffn
540 @deffn {関数} lowercasep (@var{char})    
541 もし@var{char}が小文字なら、@code{true}を返します。
543 @opencatbox
544 @category{Predicate functions} @category{Package stringproc}
545 @closecatbox
547 @end deffn
549 @defvr {変数} newline 
550 改行文字。
552 @opencatbox
553 @category{Global variables} @category{Package stringproc}
554 @closecatbox
556 @end defvr
558 @defvr {変数} space   
559 スペース文字。
561 @opencatbox
562 @category{Global variables} @category{Package stringproc}
563 @closecatbox
565 @end defvr
567 @defvr {変数} tab     
568 タブ文字。
570 @opencatbox
571 @category{Global variables} @category{Package stringproc}
572 @closecatbox
574 @end defvr
576 @deffn {関数} uppercasep (@var{char})    
577 もし@var{char}が大文字なら、@code{true}を返します。
579 @opencatbox
580 @category{Predicate functions} @category{Package stringproc}
581 @closecatbox
583 @end deffn
585 @node Functions and Variables for strings,  , Functions and Variables for characters, stringproc
586 @section Functions and Variables for strings
588 @deffn {関数} stringp (@var{obj}) 
589 もし@var{obj}が文字列なら、@code{true}を返します。
590 例はイントロダクションを参照してください。
592 @opencatbox
593 @category{Predicate functions} @category{Package stringproc}
594 @closecatbox
596 @end deffn
598 @deffn {関数} charat (@var{string}, @var{n}) 
599 @var{string}の@var{n}番目の文字を返します。
600 @var{string}の一番目の文字は@var{n} = 1で返されます。
602 @c ===beg===
603 @c charat("Lisp",1);
604 @c ===end===
605 @example
606 (%i1) charat("Lisp",1);
607 (%o1)                           L
608 @end example
610 @opencatbox
611 @category{Package stringproc}
612 @closecatbox
614 @end deffn
616 @deffn {関数} charlist (@var{string}) 
617 @var{string}の文字すべてのリストを返します。
619 @c ===beg===
620 @c charlist("Lisp");
621 @c %[1];
622 @c ===end===
623 @example
624 (%i1) charlist("Lisp");
625 (%o1)                     [L, i, s, p]
626 (%i2) %[1];
627 (%o2)                           L
628 @end example
630 @opencatbox
631 @category{Package stringproc}
632 @closecatbox
634 @end deffn
636 @deffn {関数} eval_string (@var{str})
637 文字列@var{str}をMaxima式としてパースし、評価します。
638 文字列@var{str}は終端子(ドル記号@code{$}またはセミコロン@code{;})
639 を持つかもしれませんし持たないかもしれません。
641 もし複数あるなら、最初の式だけがパースされ、評価されます。
643 もし@var{str}が文字列でないならエラーが出力されます。
645 例:
647 @c ===beg===
648 @c eval_string ("foo: 42; bar: foo^2 + baz");
649 @c eval_string ("(foo: 42, bar: foo^2 + baz)");
650 @c ===end===
651 @example
652 (%i1) eval_string ("foo: 42; bar: foo^2 + baz");
653 (%o1)                       42
654 (%i2) eval_string ("(foo: 42, bar: foo^2 + baz)");
655 (%o2)                   baz + 1764
656 @end example
658 @code{parse_string}も参照してください。
660 @opencatbox
661 @category{Package stringproc}
662 @closecatbox
664 @end deffn
666 @deffn {関数} parse_string (@var{str})
667 文字列@var{str}をMaxima式としてパースします(評価しません)。
668 文字列@var{str}は終端子(ドル記号@code{$}またはセミコロン@code{;})
669 を持つかもしれませんし持たないかもしれません。
671 もし複数あるなら、最初の式だけがパースされ、評価されます。
673 もし@var{str}が文字列でないならエラーが出力されます。
675 例:
677 @c ===beg===
678 @c parse_string ("foo: 42; bar: foo^2 + baz");
679 @c parse_string ("(foo: 42, bar: foo^2 + baz)");
680 @c ===end===
681 @example
682 (%i1) parse_string ("foo: 42; bar: foo^2 + baz");
683 (%o1)                    foo : 42
684 (%i2) parse_string ("(foo: 42, bar: foo^2 + baz)");
685                                    2
686 (%o2)          (foo : 42, bar : foo  + baz)
687 @end example
689 @code{eval_string}も参照してください。
691 @opencatbox
692 @category{Package stringproc}
693 @closecatbox
695 @end deffn
697 @deffn {関数} scopy (@var{string}) 
698 @var{string}のコピーを新しい文字列として返します。
700 @opencatbox
701 @category{Package stringproc}
702 @closecatbox
704 @end deffn
706 @deffn {関数} sdowncase (@var{string}) 
707 @deffnx {関数} sdowncase (@var{string}, @var{start}) 
708 @deffnx {関数} sdowncase (@var{string}, @var{start}, @var{end}) 
709 @code{supcase}と同様ですが、大文字が小文字に変換されます。
711 @opencatbox
712 @category{Package stringproc}
713 @closecatbox
715 @end deffn
717 @deffn {関数} sequal (@var{string_1}, @var{string_2}) 
718 もし@var{string_1}と@var{string_2}が同じ長さで、同じ文字を含むなら、
719 @code{true}を返します。
721 @opencatbox
722 @category{Predicate functions} @category{Package stringproc}
723 @closecatbox
725 @end deffn
727 @deffn {関数} sequalignore (@var{string_1}, @var{string_2})
728 @code{sequal}と同様ですが、文字の大小を無視します。
730 @opencatbox
731 @category{Predicate functions} @category{Package stringproc}
732 @closecatbox
734 @end deffn
736 @deffn {関数} sexplode (@var{string})
737 @code{sexplode}は関数@code{charlist}の別名です。
739 @opencatbox
740 @category{Package stringproc}
741 @closecatbox
743 @end deffn
745 @deffn {関数} simplode (@var{list})  
746 @deffnx {関数} simplode (@var{list}, @var{delim})  
747 @code{simplode}は式のリストを取り、それらを結合して文字列にします。
748 もしデリミタ@var{delim}が指定されないなら、
749 @code{simplode}はデリミタを使いません。
750 @var{delim}は任意の文字列を取り得ます。
752 @c ===beg===
753 @c simplode(["xx[",3,"]:",expand((x+y)^3)]);
754 @c simplode( sexplode("stars")," * " );
755 @c simplode( ["One","more","coffee."]," " );
756 @c ===end===
757 @example
758 (%i1) simplode(["xx[",3,"]:",expand((x+y)^3)]);
759 (%o1)             xx[3]:y^3+3*x*y^2+3*x^2*y+x^3
760 (%i2) simplode( sexplode("stars")," * " );
761 (%o2)                   s * t * a * r * s
762 (%i3) simplode( ["One","more","coffee."]," " );
763 (%o3)                   One more coffee.
764 @end example
766 @opencatbox
767 @category{Package stringproc}
768 @closecatbox
770 @end deffn
772 @deffn {関数} sinsert (@var{seq}, @var{string}, @var{pos})  
773 @code{substring (@var{string}, 1, @var{pos} - 1)}と
774 文字列@var{seq}、@code{substring (@var{string}, @var{pos})}
775 の結合となる文字列を返します。
776 @var{string}の一番目の文字は位置1にあることに注意してください。
778 @c ===beg===
779 @c s: "A submarine."$
780 @c concat( substring(s,1,3),"yellow ",substring(s,3) );
781 @c sinsert("hollow ",s,3);
782 @c ===end===
783 @example
784 (%i1) s: "A submarine."$
785 (%i2) concat( substring(s,1,3),"yellow ",substring(s,3) );
786 (%o2)                  A yellow submarine.
787 (%i3) sinsert("hollow ",s,3);
788 (%o3)                  A hollow submarine.
789 @end example
791 @opencatbox
792 @category{Package stringproc}
793 @closecatbox
795 @end deffn
797 @deffn {関数} sinvertcase (@var{string})  
798 @deffnx {関数} sinvertcase (@var{string}, @var{start})  
799 @deffnx {関数} sinvertcase (@var{string}, @var{start}, @var{end})  
800 位置@var{start}から@var{end}までのそれぞれの文字を逆順にすることを除いて
801 @var{string}を返します。
802 もし@var{end}が与えられないなら、
803 @var{start}から
804 @var{string}の終わりまでのすべての文字列が置き換えられます。
806 @c ===beg===
807 @c sinvertcase("sInvertCase");
808 @c ===end===
809 @example
810 (%i1) sinvertcase("sInvertCase");
811 (%o1)                      SiNVERTcASE
812 @end example
814 @opencatbox
815 @category{Package stringproc}
816 @closecatbox
818 @end deffn
820 @deffn {関数} slength (@var{string}) 
821 @var{string}の中の文字の数を返します。
823 @opencatbox
824 @category{Package stringproc}
825 @closecatbox
827 @end deffn
829 @deffn {関数} smake (@var{num}, @var{char}) 
830 @var{num}個の文字@var{char}を持つ新しい文字列を返します。
832 @c ===beg===
833 @c smake(3,"w");
834 @c ===end===
835 @example
836 (%i1) smake(3,"w");
837 (%o1)                          www
838 @end example
840 @opencatbox
841 @category{Package stringproc}
842 @closecatbox
844 @end deffn
846 @deffn {関数} smismatch (@var{string_1}, @var{string_2}) 
847 @deffnx {関数} smismatch (@var{string_1}, @var{string_2}, @var{test}) 
848 @var{string_1}と@var{string_2}が異なる@var{string_1}の最初の文字の位置、または
849 @code{false}を返します。
850 マッチングのデフォルトのテスト関数は@code{sequal}です。
851 もし@code{smismatch}が文字の大小を無視なければいけないなら、
852 テストとして@code{sequalignore}を使ってください。
854 @c ===beg===
855 @c smismatch("seven","seventh");
856 @c ===end===
857 @example
858 (%i1) smismatch("seven","seventh");
859 (%o1)                           6
860 @end example
862 @opencatbox
863 @category{Package stringproc}
864 @closecatbox
866 @end deffn
868 @deffn {関数} split (@var{string})  
869 @deffnx {関数} split (@var{string}, @var{delim})  
870 @deffnx {関数} split (@var{string}, @var{delim}, @var{multiple})  
871 @var{string}のすべてのトークンのリストを返します。
872 それぞれのトークンはパースされていない文字列です。
873 @code{split}は@var{delim}をデリミタとして使います。
874 もし@var{delim}が与えられないなら、
875 スペース文字がデフォルトのデリミタです。
876 @var{multiple}はデフォルトで@code{true}のブーリアン変数です。
877 重複デリミタが1つとして読まれます。
878 これは、
879 もしタブが複数スペース文字として保存されているなら、
880 役立ちます。
881 もし@var{multiple}が@code{false}に設定されるなら、
882 それぞれのデリミタが有効です。
884 @c ===beg===
885 @c split("1.2   2.3   3.4   4.5");
886 @c split("first;;third;fourth",";",false);
887 @c ===end===
888 @example
889 (%i1) split("1.2   2.3   3.4   4.5");
890 (%o1)                 [1.2, 2.3, 3.4, 4.5]
891 (%i2) split("first;;third;fourth",";",false);
892 (%o2)               [first, , third, fourth]
893 @end example
895 @opencatbox
896 @category{Package stringproc}
897 @closecatbox
899 @end deffn
901 @deffn {関数} sposition (@var{char}, @var{string}) 
902 @var{string}の中で、@var{char}とマッチする最初の文字の位置を返します。
903 @var{string}の一番目の文字は位置1にあります。
904 文字の大小を無視した文字のマッチに関しては,
905 @code{ssearch}を参照してください。
907 @opencatbox
908 @category{Package stringproc}
909 @closecatbox
911 @end deffn
913 @deffn {関数} sremove (@var{seq}, @var{string})  
914 @deffnx {関数} sremove (@var{seq}, @var{string}, @var{test})  
915 @deffnx {関数} sremove (@var{seq}, @var{string}, @var{test}, @var{start})  
916 @deffnx {関数} sremove (@var{seq}, @var{string}, @var{test}, @var{start}, @var{end})  
917 @var{string}同様文字列を返しますが、
918 @var{seq}とマッチする部分文字列すべてなしに返します。
919 マッチのデフォルトのテスト関数は@code{sequal}です。
920 もし@code{sremove}が@var{seq}を検索する間文字の大小を無視しなければいけないなら、
921 テストとして@code{sequalignore}を使ってください。
922 探索を限定するには@var{start}と@var{end}を使ってください。
923 @var{string}の一番目の文字は位置1にあることに注意してください。
925 @c ===beg===
926 @c sremove("n't","I don't like coffee.");
927 @c sremove ("DO ",%,'sequalignore);
928 @c ===end===
929 @example
930 (%i1) sremove("n't","I don't like coffee.");
931 (%o1)                   I do like coffee.
932 (%i2) sremove ("DO ",%,'sequalignore);
933 (%o2)                    I like coffee.
934 @end example
936 @opencatbox
937 @category{Package stringproc}
938 @closecatbox
940 @end deffn
942 @deffn {関数} sremovefirst (@var{seq}, @var{string})  
943 @deffnx {関数} sremovefirst (@var{seq}, @var{string}, @var{test})  
944 @deffnx {関数} sremovefirst (@var{seq}, @var{string}, @var{test}, @var{start})  
945 @deffnx {関数} sremovefirst (@var{seq}, @var{string}, @var{test}, @var{start}, @var{end})  
946 @code{seq}とマッチする最初の文字列だけが削除されることを除いて、
947 @code{sremove}同様です。
949 @opencatbox
950 @category{Package stringproc}
951 @closecatbox
953 @end deffn
955 @deffn {関数} sreverse (@var{string}) 
956 @var{string}の文字すべてが逆順の文字列を返します。
959 @opencatbox
960 @category{Package stringproc}
961 @closecatbox
963 @end deffn
965 @deffn {関数} ssearch (@var{seq}, @var{string})  
966 @deffnx {関数} ssearch (@var{seq}, @var{string}, @var{test})  
967 @deffnx {関数} ssearch (@var{seq}, @var{string}, @var{test}, @var{start})  
968 @deffnx {関数} ssearch (@var{seq}, @var{string}, @var{test}, @var{start}, @var{end})
969 文字列@var{seq}とマッチする@var{string}の最初の部分文字列の位置を返します。
970 マッチのためのデフォルトのテスト関数は@code{sequal}です。
971 もし@code{ssearch}が文字の大小を無視しなければいけないなら、
972 テストとして@code{sequalignore}を使ってください。
973 検索を限定するには、@var{start}と@var{end}を使ってください。
974 @var{string}の一番目の文字は位置1にあることに注意してください。
976 @example
977 (%i1) ssearch("~s","~@{~S ~@}~%",'sequalignore);
978 (%o1)                                  4
979 @end example
981 @opencatbox
982 @category{Package stringproc}
983 @closecatbox
985 @end deffn
987 @deffn {関数} ssort (@var{string}) 
988 @deffnx {関数} ssort (@var{string}, @var{test}) 
989 @code{test (@var{c}, @var{d})}が@code{false}、かつ、@code{test (@var{d}, @var{c})}が@code{true}であるような2つの連続する文字@var{c}と@var{d}がないような順で
990 @var{string}の文字すべてを含む文字列を返します。
992 ソートのためのデフォルトのテスト関数は@var{clessp}です。
993 テスト関数一式は@code{@{clessp, clesspignore, cgreaterp, cgreaterpignore, cequal, cequalignore@}}です。
995 @c ===beg===
996 @c ssort("I don't like Mondays.");
997 @c ssort("I don't like Mondays.",'cgreaterpignore);
998 @c ===end===
999 @example
1000 (%i1) ssort("I don't like Mondays.");
1001 (%o1)                    '.IMaddeiklnnoosty
1002 (%i2) ssort("I don't like Mondays.",'cgreaterpignore);
1003 (%o2)                 ytsoonnMlkIiedda.'   
1004 @end example
1006 @opencatbox
1007 @category{Package stringproc}
1008 @closecatbox
1010 @end deffn
1012 @deffn {関数} ssubst (@var{new}, @var{old}, @var{string}) 
1013 @deffnx {関数} ssubst (@var{new}, @var{old}, @var{string}, @var{test}) 
1014 @deffnx {関数} ssubst (@var{new}, @var{old}, @var{string}, @var{test}, @var{start}) 
1015 @deffnx {関数} ssubst (@var{new}, @var{old}, @var{string}, @var{test}, @var{start}, @var{end}) 
1016 @var{string}の中の@var{old}にマッチするすべての部分文字列を
1017 @var{new}で置き換えた文字列を返します。
1018 @var{old}と@var{new}は同じ長さである必要はありません。
1019 マッチのためのデフォルトのテスト関数は@code{sequal}です。
1020 もし@code{ssubst}がoldを検索する間大文字小文字を無視すべきなら、
1021 テストとして@code{sequalignore}を使ってください。
1022 検索を制限するには、@var{start}と@var{end}を使ってください。
1023 @var{string}の一番目の文字は位置1にあることに注意してください。
1025 @c ===beg===
1026 @c ssubst("like","hate","I hate Thai food. I hate green tea.");
1027 @c ssubst("Indian","thai",%,'sequalignore,8,12);
1028 @c ===end===
1029 @example
1030 (%i1) ssubst("like","hate","I hate Thai food. I hate green tea.");
1031 (%o1)          I like Thai food. I like green tea.
1032 (%i2) ssubst("Indian","thai",%,'sequalignore,8,12);
1033 (%o2)         I like Indian food. I like green tea.
1034 @end example
1036 @opencatbox
1037 @category{Package stringproc}
1038 @closecatbox
1040 @end deffn
1042 @deffn {関数} ssubstfirst (@var{new}, @var{old}, @var{string}) 
1043 @deffnx {関数} ssubstfirst (@var{new}, @var{old}, @var{string}, @var{test}) 
1044 @deffnx {関数} ssubstfirst (@var{new}, @var{old}, @var{string}, @var{test}, @var{start}) 
1045 @deffnx {関数} ssubstfirst (@var{new}, @var{old}, @var{string}, @var{test}, @var{start}, @var{end}) 
1046 @var{old}とマッチする最初の部分文字列だけを置き換えることを除いて、
1047 @code{subst}と同様です。
1049 @opencatbox
1050 @category{Package stringproc}
1051 @closecatbox
1053 @end deffn
1055 @deffn {関数} strim (@var{seq},@var{string}) 
1056 @var{string}の両端から@var{seq}に現れるすべての文字を除いた文字列を返します。
1058 @c ===beg===
1059 @c "/* comment */"$
1060 @c strim(" /*",%);
1061 @c slength(%);
1062 @c ===end===
1063 @example
1064 (%i1) "/* comment */"$
1065 (%i2) strim(" /*",%);
1066 (%o2)                        comment
1067 (%i3) slength(%);
1068 (%o3)                           7
1069 @end example
1071 @opencatbox
1072 @category{Package stringproc}
1073 @closecatbox
1075 @end deffn
1077 @deffn {関数} striml (@var{seq}, @var{string}) 
1078 @var{string}の左端だけトリムすることを除いて
1079 @code{strim}と同様です。
1081 @opencatbox
1082 @category{Package stringproc}
1083 @closecatbox
1085 @end deffn
1087 @deffn {関数} strimr (@var{seq}, @var{string}) 
1088 @var{string}の右端だけトリムすることを除いて
1089 @code{strim}と同様です。
1091 @opencatbox
1092 @category{Package stringproc}
1093 @closecatbox
1095 @end deffn
1097 @deffn {関数} substring (@var{string}, @var{start})
1098 @deffnx {関数} substring (@var{string}, @var{start}, @var{end}) 
1099 位置@var{start}で始まり位置@var{end}で終わる
1100 @var{string}の部分文字列を返します。
1101 位置@var{end}の文字は含まれません。
1102 もし@var{end}が与えられないなら、部分文字列は文字列の残りを含みます。
1103 @var{string}の一番目の文字は位置1にあることに注意してください。
1105 @c ===beg===
1106 @c substring("substring",4);
1107 @c substring(%,4,6);
1108 @c ===end===
1109 @example
1110 (%i1) substring("substring",4);
1111 (%o1)                        string
1112 (%i2) substring(%,4,6);
1113 (%o2)                          in
1114 @end example
1116 @opencatbox
1117 @category{Package stringproc}
1118 @closecatbox
1120 @end deffn
1122 @deffn {関数} supcase (@var{string}) 
1123 @deffnx {関数} supcase (@var{string}, @var{start}) 
1124 @deffnx {関数} supcase (@var{string}, @var{start}, @var{end}) 
1125 @var{string}の位置@var{start}から@var{end}までの小文字を対応する大文字に置き換えた
1126 文字列を返します。
1127 もし@var{end}が与えられないなら、
1128 @var{start}から@var{string}の終わりまでのすべての小文字が置き換えられます。
1130 @c ===beg===
1131 @c supcase("english",1,2);
1132 @c ===end===
1133 @example
1134 (%i1) supcase("english",1,2);
1135 (%o1)                        English
1136 @end example
1138 @opencatbox
1139 @category{Package stringproc}
1140 @closecatbox
1142 @end deffn
1144 @deffn {関数} tokens (@var{string}) 
1145 @deffnx {関数} tokens (@var{string}, @var{test}) 
1146 @var{string}から抽出されたトークンのリストを返します。
1147 トークンは、文字があるテスト関数を満たす部分文字列です。
1148 もしテストが与えられないなら、
1149 @var{constituent}がデフォルトテストとして使われます。
1150 @code{@{constituent, alphacharp, digitcharp, lowercasep, uppercasep, charp, characterp, alphanumericp@}}はテスト関数一式です。
1151 (The Lisp-version of 
1152 @code{tokens}のLispバージョンはPaul Grahamによって書かれました。 ANSI Common Lisp, 1996, page 67.)
1154 @c ===beg===
1155 @c tokens("24 October 2005");
1156 @c tokens("05-10-24",'digitcharp);
1157 @c map(parse_string,%);
1158 @c ===end===
1159 @example
1160 (%i1) tokens("24 October 2005");
1161 (%o1)                  [24, October, 2005]
1162 (%i2) tokens("05-10-24",'digitcharp);
1163 (%o2)                     [05, 10, 24]
1164 (%i3) map(parse_string,%);
1165 (%o3)                      [5, 10, 24]
1166 @end example
1168 @opencatbox
1169 @category{Package stringproc}
1170 @closecatbox
1172 @end deffn