stringproc (Maxima 5.50.0 Manual)

## 79 stringproc ¶

### 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`で行うことができます。 (関連として、`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`は１例です。

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`は行全体を１つの文字列として返します。 現在、`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`を返します。

Strings · Share packages · Package stringproc ·

### 79.2 Functions and Variables for input and output ¶

例:

    (%i1) s: openw("E:/file.txt");
    (%o1)                     #<output stream E:/file.txt>
    (%i2) control:
    "~2tAn atom: ~20t~a~%~2tand a list: ~20t~{~r ~}~%~2t\
    and an integer: ~20t~d~%"$
    (%i3) printf( s,control, 'true,[1,2,3],42 )$
    (%o3)                                false
    (%i4) close(s);
    (%o4)                                true
    (%i5) s: openr("E:/file.txt");
    (%o5)                     #<input stream E:/file.txt>
    (%i6) while stringp( tmp:readline(s) ) do print(tmp)$
      An atom:          true
      and a list:       one two three
      and an integer:   42
    (%i7) close(s)$

関数: close (stream) ¶

  streamを閉じて、 もしstreamが開いていたら `true`を返します。

  File input · File output · Package stringproc ·

関数: flength (stream) ¶

  streamの中の要素の数を返します。

  File input · File output · Package stringproc ·

関数: fposition (stream) ¶
関数: fposition (stream, pos) ¶

  もしposが使われてないなら、 streamの中の現在位置を返します。 もしposが使われているなら、 `fposition`はstreamの中の位置を設定します。 posは正の数でなければいけません。 streamの最初の要素は位置1にあります。

  File input · File output · Package stringproc ·

関数: freshline () ¶
関数: freshline (stream) ¶

  もし位置が行の最初でないなら (streamに)改行を書きます。 `newline`も参照してください。

  File output · Package stringproc ·

関数: newline () ¶
関数: newline (stream) ¶

  (streamに)改行を書きます。 `newline()`の使用の例に関しては、 `sprint`を参照してください。 `newline()`が期待通りに動かない いくつかの場合があることに注意してください。

  File output · Package stringproc ·

関数: opena (file) ¶

  fileへの出力ストリームを返します。 もし存在しているファイルを開いたら、 `opena`はファイルの終わりに要素を追加します。

  File output · Package stringproc ·

関数: openr (file) ¶

  fileへの入力ストリームを返します。 もしfileが存在しないなら、生成されます。

  File input · Package stringproc ·

関数: openw (file) ¶

  fileへの出力ストリームを返します。 もしfileが存在しないなら、生成されます。 もし存在しているファイルを開いたら、`openw`は fileを破壊的に変更します。

  File output · Package stringproc ·

関数: printf (dest, string) ¶
関数: printf (dest, string, expr_1, ..., expr_n) ¶

  Common Lisp関数FORMATをMaximaで利用可能にします。 (gcl.infoから: 「フォーマットは 制御文字列の文字を出力し、波形記号がディレクティブを挿入することを守ることで、 フォーマットされた出力を生成します。 波形記号の後の文字は多分、前置パラメータと修飾語が先行し、 望まれるフォーマットの種類を指定します。 ほとんどのディレクティブは、出力を生成するために1つまたは複数の引数を使います。」)

  以下の記述と例は`printf`を使うアイデアを与えるかもしれません。 さらなる情報に関して、Lisp参考文献を参照してください。

         ~%       改行
         ~&       行のフレッシュ
         ~t       タブ
         ~$       通貨記号
         ~d       10進整数
         ~b       2進整数
         ~o       8進整数
         ~x       16進整数
         ~br      b進整数
         ~r       整数を一字一字
         ~p       複数形
         ~f       浮動小数点
         ~e       科学的記数法
         ~g       大きさに応じて~fまたは~e
         ~h       多倍長浮動小数点
         ~a       Maxima関数文字列を使う
         ~s       ~aと同様, しかし"ダブルコーテーション"で囲まれた出力
         ~~       ~
         ~<       行揃え, ~> 終端
         ~(       大文字小文字変換, ~) 終端
         ~[       選択, ~] 終端
         ~{       繰り返し, ~} 終端

  選択ディレクティブ`~[`は添字がゼロから始まることに注意してください。 ディレクティブ~*がサポートされていないことにも注意してください。

      (%i1) printf( false, "~a ~a ~4f ~a ~@r",
                    "String",sym,bound,sqrt(12),144), bound = 1.234;
      (%o1)                 String sym 1.23 2*sqrt(3) CXLIV
      (%i2) printf( false,"~{~a ~}",["one",2,"THREE"] );
      (%o2)                          one 2 THREE
      (%i3) printf(true,"~{~{~9,1f ~}~%~}",mat ),
                mat = args(matrix([1.1,2,3.33],[4,5,6],[7,8.88,9]))$
            1.1       2.0       3.3
            4.0       5.0       6.0
            7.0       8.9       9.0
      (%i4) control: "~:(~r~) bird~p ~[is~;are~] singing."$
      (%i5) printf( false,control, n,n,if n=1 then 0 else 1 ), n=2;
      (%o5)                    Two birds are singing.

  もしdestがストリームか`true`なら、 `printf`は`false`を返します。 そうでないなら、`printf`は出力を含む文字列を返します。

  File output · Package stringproc ·

関数: readline (stream) ¶

  streamの現在位置から行の終わりまでの文字を含む文字列か、 もしファイルの終わりが来たらfalseを返します。

  File input · Package stringproc ·

関数: sprint (expr_1, …, expr_n) ¶

  引数を順に評価し、一番左から始まる「一行」に表示します。 数は数の右隣に’-’と共に印字され、行の長さを無視します。 もし中間行ブレークを置きたいなら、 `newline()`―`stringproc.lisp` から自動ロードされます― が役に立つかもしれません。

  例:

      (%i1) for n:0 thru 19 do sprint( fib(n) )$
      0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 1597 2584 4181
      (%i2) for n:0 thru 22 do (
               sprint(fib(n)), if mod(n,10)=9 then newline() )$
      0 1 1 2 3 5 8 13 21 34
      55 89 144 233 377 610 987 1597 2584 4181
      6765 10946 17711

  Package stringproc ·

### 79.3 Functions and Variables for characters ¶

関数: alphacharp (char) ¶

  もしcharがアルファベット文字なら`true`を返します。

  Predicate functions · Package stringproc ·

関数: alphanumericp (char) ¶

  もしcharがアルファベット文字か数字なら`true`を返します。

  Predicate functions · Package stringproc ·

関数: ascii (int) ¶

  ASCIIコードint( -1 < int < 256 )に対応する文字を返します。

      (%i1) for n from 0 thru 255 do (
         tmp: ascii(n), if alphacharp(tmp) then sprint(tmp),
            if n=96 then newline() )$
      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
      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

  Package stringproc ·

関数: cequal (char_1, char_2) ¶

  もしchar_1とchar_2が同じなら`true`を返します。

  Predicate functions · Package stringproc ·

関数: cequalignore (char_1, char_2) ¶

  `cequal`と同様ですが、文字の大小を無視します。

  Predicate functions · Package stringproc ·

関数: cgreaterp (char_1, char_2) ¶

  もしchar_1のASCIIコードがchar_2のそれより大きいなら`true`を返します。

  Predicate functions · Package stringproc ·

関数: cgreaterpignore (char_1, char_2) ¶

  `cgreaterp`と同様ですが、文字の大小を無視します。

  Predicate functions · Package stringproc ·

関数: charp (obj) ¶

  もしobjがMaxima-文字なら`true`を返します。 例えばイントロダクションを参照してください。

  Predicate functions · Package stringproc ·

関数: cint (char) ¶

  charのASCIIコードを返します。

  Package stringproc ·

関数: clessp (char_1, char_2) ¶

  もしchar_1のASCIIコードがchar_2のそれより小さいなら`true`を返します。

  Predicate functions · Package stringproc ·

関数: clesspignore (char_1, char_2) ¶

  `clessp`と同様ですが、文字の大小を無視します。

  Predicate functions · Package stringproc ·

関数: constituent (char) ¶

  もしcharがグラフィック文字であり、スペース文字でないなら、 `true`を返します。 グラフィック文字は見ることができる文字とスペース文字です。 (`constituent`は、Paul Graham, ANSI Common Lisp, 1996, page 67で定義されています。)

      (%i1) for n from 0 thru 255 do (
      tmp: ascii(n), if constituent(tmp) then sprint(tmp) )$
      ! " #  %  ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ 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 [ \ ] ^ _ ` 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 { | } ~

  Predicate functions · Package stringproc ·

関数: cunlisp (lisp_char) ¶

  Lisp文字をMaxima文字に変換します。 (必要としないでしょう。)

  Package stringproc ·

関数: digitcharp (char) ¶

  もしcharが0から9までの数字なら、 `true`を返します。

  Predicate functions · Package stringproc ·

関数: lcharp (obj) ¶

  もし objがLisp文字なら、`true`を返します。 (必要としないでしょう。)

  Predicate functions · Package stringproc ·

関数: lowercasep (char) ¶

  もしcharが小文字なら、`true`を返します。

  Predicate functions · Package stringproc ·

変数: newline ¶

  改行文字。

  Global variables · Package stringproc ·

変数: space ¶

  スペース文字。

  Global variables · Package stringproc ·

変数: tab ¶

  タブ文字。

  Global variables · Package stringproc ·

関数: uppercasep (char) ¶

  もしcharが大文字なら、`true`を返します。

  Predicate functions · Package stringproc ·

### 79.4 Functions and Variables for strings ¶

関数: stringp (obj) ¶

  もしobjが文字列なら、`true`を返します。 例はイントロダクションを参照してください。

  Predicate functions · Package stringproc ·

関数: charat (string, n) ¶

  stringのn番目の文字を返します。 stringの一番目の文字はn = 1で返されます。

      (%i1) charat("Lisp",1);
      (%o1)                           L

  Package stringproc ·

関数: charlist (string) ¶

  stringの文字すべてのリストを返します。

      (%i1) charlist("Lisp");
      (%o1)                     [L, i, s, p]
      (%i2) %[1];
      (%o2)                           L

  Package stringproc ·

関数: eval_string (str) ¶

  文字列strをMaxima式としてパースし、評価します。 文字列strは終端子(ドル記号`$`またはセミコロン`;`) を持つかもしれませんし持たないかもしれません。

  もし複数あるなら、最初の式だけがパースされ、評価されます。

  もしstrが文字列でないならエラーが出力されます。

  例:

      (%i1) eval_string ("foo: 42; bar: foo^2 + baz");
      (%o1)                       42
      (%i2) eval_string ("(foo: 42, bar: foo^2 + baz)");
      (%o2)                   baz + 1764

  `parse_string`も参照してください。

  Package stringproc ·

関数: parse_string (str) ¶

  文字列strをMaxima式としてパースします(評価しません)。 文字列strは終端子(ドル記号`$`またはセミコロン`;`) を持つかもしれませんし持たないかもしれません。

  もし複数あるなら、最初の式だけがパースされ、評価されます。

  もしstrが文字列でないならエラーが出力されます。

  例:

      (%i1) parse_string ("foo: 42; bar: foo^2 + baz");
      (%o1)                    foo : 42
      (%i2) parse_string ("(foo: 42, bar: foo^2 + baz)");
                                         2
      (%o2)          (foo : 42, bar : foo  + baz)

  `eval_string`も参照してください。

  Package stringproc ·

関数: scopy (string) ¶

  stringのコピーを新しい文字列として返します。

  Package stringproc ·

関数: sdowncase (string) ¶
関数: sdowncase (string, start) ¶
関数: sdowncase (string, start, end) ¶

  `supcase`と同様ですが、大文字が小文字に変換されます。

  Package stringproc ·

関数: sequal (string_1, string_2) ¶

  もしstring_1とstring_2が同じ長さで、同じ文字を含むなら、 `true`を返します。

  Predicate functions · Package stringproc ·

関数: sequalignore (string_1, string_2) ¶

  `sequal`と同様ですが、文字の大小を無視します。

  Predicate functions · Package stringproc ·

関数: sexplode (string) ¶

  `sexplode`は関数`charlist`の別名です。

  Package stringproc ·

関数: simplode (list) ¶
関数: simplode (list, delim) ¶

  `simplode`は式のリストを取り、それらを結合して文字列にします。 もしデリミタdelimが指定されないなら、 `simplode`はデリミタを使いません。 delimは任意の文字列を取り得ます。

      (%i1) simplode(["xx[",3,"]:",expand((x+y)^3)]);
      (%o1)             xx[3]:y^3+3*x*y^2+3*x^2*y+x^3
      (%i2) simplode( sexplode("stars")," * " );
      (%o2)                   s * t * a * r * s
      (%i3) simplode( ["One","more","coffee."]," " );
      (%o3)                   One more coffee.

  Package stringproc ·

関数: sinsert (seq, string, pos) ¶

  `substring (string, 1, pos - 1)`と 文字列seq、`substring (string, pos)` の結合となる文字列を返します。 stringの一番目の文字は位置1にあることに注意してください。

      (%i1) s: "A submarine."$
      (%i2) concat( substring(s,1,3),"yellow ",substring(s,3) );
      (%o2)                  A yellow submarine.
      (%i3) sinsert("hollow ",s,3);
      (%o3)                  A hollow submarine.

  Package stringproc ·

関数: sinvertcase (string) ¶
関数: sinvertcase (string, start) ¶
関数: sinvertcase (string, start, end) ¶

  位置startからendまでのそれぞれの文字を逆順にすることを除いて stringを返します。 もしendが与えられないなら、 startから stringの終わりまでのすべての文字列が置き換えられます。

      (%i1) sinvertcase("sInvertCase");
      (%o1)                      SiNVERTcASE

  Package stringproc ·

関数: slength (string) ¶

  stringの中の文字の数を返します。

  Package stringproc ·

関数: smake (num, char) ¶

  num個の文字charを持つ新しい文字列を返します。

      (%i1) smake(3,"w");
      (%o1)                          www

  Package stringproc ·

関数: smismatch (string_1, string_2) ¶
関数: smismatch (string_1, string_2, test) ¶

  string_1とstring_2が異なるstring_1の最初の文字の位置、または `false`を返します。 マッチングのデフォルトのテスト関数は`sequal`です。 もし`smismatch`が文字の大小を無視なければいけないなら、 テストとして`sequalignore`を使ってください。

      (%i1) smismatch("seven","seventh");
      (%o1)                           6

  Package stringproc ·

関数: split (string) ¶
関数: split (string, delim) ¶
関数: split (string, delim, multiple) ¶

  stringのすべてのトークンのリストを返します。 それぞれのトークンはパースされていない文字列です。 `split`はdelimをデリミタとして使います。 もしdelimが与えられないなら、 スペース文字がデフォルトのデリミタです。 multipleはデフォルトで`true`のブーリアン変数です。 重複デリミタが1つとして読まれます。 これは、 もしタブが複数スペース文字として保存されているなら、 役立ちます。 もしmultipleが`false`に設定されるなら、 それぞれのデリミタが有効です。

      (%i1) split("1.2   2.3   3.4   4.5");
      (%o1)                 [1.2, 2.3, 3.4, 4.5]
      (%i2) split("first;;third;fourth",";",false);
      (%o2)               [first, , third, fourth]

  Package stringproc ·

関数: sposition (char, string) ¶

  stringの中で、charとマッチする最初の文字の位置を返します。 stringの一番目の文字は位置1にあります。 文字の大小を無視した文字のマッチに関しては， `ssearch`を参照してください。

  Package stringproc ·

関数: sremove (seq, string) ¶
関数: sremove (seq, string, test) ¶
関数: sremove (seq, string, test, start) ¶
関数: sremove (seq, string, test, start, end) ¶

  string同様文字列を返しますが、 seqとマッチする部分文字列すべてなしに返します。 マッチのデフォルトのテスト関数は`sequal`です。 もし`sremove`がseqを検索する間文字の大小を無視しなければいけないなら、 テストとして`sequalignore`を使ってください。 探索を限定するにはstartとendを使ってください。 stringの一番目の文字は位置1にあることに注意してください。

      (%i1) sremove("n't","I don't like coffee.");
      (%o1)                   I do like coffee.
      (%i2) sremove ("DO ",%,'sequalignore);
      (%o2)                    I like coffee.

  Package stringproc ·

関数: sremovefirst (seq, string) ¶
関数: sremovefirst (seq, string, test) ¶
関数: sremovefirst (seq, string, test, start) ¶
関数: sremovefirst (seq, string, test, start, end) ¶

  `seq`とマッチする最初の文字列だけが削除されることを除いて、 `sremove`同様です。

  Package stringproc ·

関数: sreverse (string) ¶

  stringの文字すべてが逆順の文字列を返します。

  Package stringproc ·

関数: ssearch (seq, string) ¶
関数: ssearch (seq, string, test) ¶
関数: ssearch (seq, string, test, start) ¶
関数: ssearch (seq, string, test, start, end) ¶

  文字列seqとマッチするstringの最初の部分文字列の位置を返します。 マッチのためのデフォルトのテスト関数は`sequal`です。 もし`ssearch`が文字の大小を無視しなければいけないなら、 テストとして`sequalignore`を使ってください。 検索を限定するには、startとendを使ってください。 stringの一番目の文字は位置1にあることに注意してください。

      (%i1) ssearch("~s","~{~S ~}~%",'sequalignore);
      (%o1)                                  4

  Package stringproc ·

関数: ssort (string) ¶
関数: ssort (string, test) ¶

  `test (c, d)`が`false`、かつ、`test (d, c)`が`true`であるような2つの連続する文字cとdがないような順で stringの文字すべてを含む文字列を返します。

  ソートのためのデフォルトのテスト関数はclesspです。 テスト関数一式は`{clessp, clesspignore, cgreaterp, cgreaterpignore, cequal, cequalignore}`です。

      (%i1) ssort("I don't like Mondays.");
      (%o1)                    '.IMaddeiklnnoosty
      (%i2) ssort("I don't like Mondays.",'cgreaterpignore);
      (%o2)                 ytsoonnMlkIiedda.'

  Package stringproc ·

関数: ssubst (new, old, string) ¶
関数: ssubst (new, old, string, test) ¶
関数: ssubst (new, old, string, test, start) ¶
関数: ssubst (new, old, string, test, start, end) ¶

  stringの中のoldにマッチするすべての部分文字列を newで置き換えた文字列を返します。 oldとnewは同じ長さである必要はありません。 マッチのためのデフォルトのテスト関数は`sequal`です。 もし`ssubst`がoldを検索する間大文字小文字を無視すべきなら、 テストとして`sequalignore`を使ってください。 検索を制限するには、startとendを使ってください。 stringの一番目の文字は位置1にあることに注意してください。

      (%i1) ssubst("like","hate","I hate Thai food. I hate green tea.");
      (%o1)          I like Thai food. I like green tea.
      (%i2) ssubst("Indian","thai",%,'sequalignore,8,12);
      (%o2)         I like Indian food. I like green tea.

  Package stringproc ·

関数: ssubstfirst (new, old, string) ¶
関数: ssubstfirst (new, old, string, test) ¶
関数: ssubstfirst (new, old, string, test, start) ¶
関数: ssubstfirst (new, old, string, test, start, end) ¶

  oldとマッチする最初の部分文字列だけを置き換えることを除いて、 `subst`と同様です。

  Package stringproc ·

関数: strim (seq,string) ¶

  stringの両端からseqに現れるすべての文字を除いた文字列を返します。

      (%i1) "/* comment */"$
      (%i2) strim(" /*",%);
      (%o2)                        comment
      (%i3) slength(%);
      (%o3)                           7

  Package stringproc ·

関数: striml (seq, string) ¶

  stringの左端だけトリムすることを除いて `strim`と同様です。

  Package stringproc ·

関数: strimr (seq, string) ¶

  stringの右端だけトリムすることを除いて `strim`と同様です。

  Package stringproc ·

関数: substring (string, start) ¶
関数: substring (string, start, end) ¶

  位置startで始まり位置endで終わる stringの部分文字列を返します。 位置endの文字は含まれません。 もしendが与えられないなら、部分文字列は文字列の残りを含みます。 stringの一番目の文字は位置1にあることに注意してください。

      (%i1) substring("substring",4);
      (%o1)                        string
      (%i2) substring(%,4,6);
      (%o2)                          in

  Package stringproc ·

関数: supcase (string) ¶
関数: supcase (string, start) ¶
関数: supcase (string, start, end) ¶

  stringの位置startからendまでの小文字を対応する大文字に置き換えた 文字列を返します。 もしendが与えられないなら、 startからstringの終わりまでのすべての小文字が置き換えられます。

      (%i1) supcase("english",1,2);
      (%o1)                        English

  Package stringproc ·

関数: tokens (string) ¶
関数: tokens (string, test) ¶

  stringから抽出されたトークンのリストを返します。 トークンは、文字があるテスト関数を満たす部分文字列です。 もしテストが与えられないなら、 constituentがデフォルトテストとして使われます。 `{constituent, alphacharp, digitcharp, lowercasep, uppercasep, charp, characterp, alphanumericp}`はテスト関数一式です。 (The Lisp-version of `tokens`のLispバージョンはPaul Grahamによって書かれました。 ANSI Common Lisp, 1996, page 67.)

      (%i1) tokens("24 October 2005");
      (%o1)                  [24, October, 2005]
      (%i2) tokens("05-10-24",'digitcharp);
      (%o2)                     [05, 10, 24]
      (%i3) map(parse_string,%);
      (%o3)                      [5, 10, 24]

  Package stringproc ·