Next: srfi.152 - 文字列ライブラリ(簡略版), Previous: srfi.129 - Titlecase手続き, Up: ライブラリモジュール - SRFI [Contents][Index]
srfi.130 - カーソルを使う文字列ライブラリこれはsrfi.13の縮小バージョンで、インデックスの箇所に文字列カーソルも
使えるようにしたものです。APIにはR7RSと最近のsrfiとの一貫性も考慮してあります。
Gaucheは文字列カーソルを組み込みでサポートしており(文字列カーソル参照)、 文字列インデックスを引数に取る組み込み手続きやSRFI-13手続きはインデックスの箇所に 文字列カーソルを渡すことができます。ただ、ポータブルなコードを書いている場合は、 このモジュールを明示的に使うのが良いでしょう。
以下の手続きは組み込みです。文字列カーソルを参照してください。
string-cursor? string-cursor-start string-cursor-end string-cursor-next strig-cursor-prev string-cursor-forward string-cursor-back string-cursor=? string-cursor<? string-cursor<=? string-cursor>? string-cursor>=? string-cursor-diff string-cursor->index string-index->cursor
以下の手続きは/cursorや/cursorsサフィックスを除いた
組み込み手続きの単なる別名になっています。
string->list/cursors string->vector/cursors string-copy/cursors string-ref/cursor substring/cursors
以下の手続きはSRFI-13で定義されています (srfi.13 - 文字列ライブラリ参照)。
SRFI-13でインデックスのみを受け取る手続きは、SRFI-130で
インデックスと文字列カーソル両方を受け取るように拡張されています。
GaucheではSRFI-13とSRFI-130の手続きは同じコードを利用していて、
従って常にインデックスも文字列カーソルも使えますが、
SRFI-13としてインポートした手続きに文字列カーソルを渡すのはポータブルではありません。
string-null? string-any string-every string-tabulate string-unfold string-unfold-right reverse-list->string string-take string-drop string-take-right string-drop-right string-pad string-pad-right string-trim string-trim-right string-trim-both string-replace string-prefix-length string-suffix-length string-prefix? string-suffix string-concatenate string-concatenate-reverse string-count string-filter string-reverse
以下の手続きは、整数インデックスを取る引数が文字列カーソルも取れるという点を除いて、
SRFI-152にあるものと同じです (srfi.152 - 文字列ライブラリ(簡略版)参照):
string-replicate string-remove string-split
以下の手続きはSRFI-13の同名の手続きと異なり、インデックスではなく文字列カーソルを返します。 以下で詳しく説明します。
string-index string-index-right string-skip string-skip-right string-contains string-contains-right
[SRFI-130]{srfi.130}
predを満たす(string-index/string-index-right)
もしくは満たさない(string-skip/string-skip-right)最初の文字
の位置を返します。
string-index/string-skipは左から、
string-index-right/string-skip-rightは右から該当する文字を探します。
SRFI-13の同名の手続きが整数の文字インデックスを返すのに対し、 これらは文字列カーソルを返します。
string-indexが返すカーソルは、
predを満たす最も左の文字を指しています。
一方、string-index-rightが返すカーソルは、
predを満たす最も右の文字の次(一つ右)を指しています。
また、ひとつもpredを満たす文字が無かった場合、
string-indexは文字列の最後(最後の文字の次)を指すカーソルを、
string-index-rightは文字列の先頭を指すカーソルを返します。
(*-skipは条件が逆になるだけです)。
(この仕様は、カーソルが文字の「間」にあると考える方がわかりやすいかもしれません。 左から右に文字列を見て行く時は、カーソルは自分の右側の文字を見ます。 右から左に見て行く時は、自分の左側の文字を見ます。)
条件を満たす文字が無かった時にもカーソルが返されることに注意してください。
SRFI-13のバージョンではその場合は#fが返されていました。
省略可能なstart/end引数は文字列カーソルか整数の文字インデックスで、 探索領域を限定します。
(define *s* "abc def ghi") (string-cursor->index *s* (string-index *s* char-whitespace?)) ⇒ 3 (string-cursor->index *s* (string-index *s* char-whitespace? 4)) ⇒ 7 (string-cursor->index *s* (string-index-right *s* char-whitespace?)) ⇒ 8 (string-cursor->index *s* (string-index-right *s* char-whitespace? 0 7)) ⇒ 4
[SRFI-130]{srfi.130}
文字列haystackの中から部分文字列needleを探します。探索方向は、
string-containsでは左から右へstring-contains-rightでは
右から左です。
SRFI-13の同名の手続きは、見つかった部分文字列の開始位置を整数インデックスで 返しますが、これらの手続きは文字列カーソルで返します。
haystackがneedle中に無ければ#fが返されます。
[SRFI-130]{srfi.130}
procをstring中の各文字列カーソル位置(左から右へ)を引数にして
順に呼び出します。ただし最後のカーソル(末尾文字の次の位置)についてはproc
を呼びません。
SRFI-13のstring-for-each-indexの文字列カーソル版です。
(define s "abc")
(string-for-each-cursor (^c (display (string-ref/cursor s c))) s)
⇒ displays abc
Next: srfi.152 - 文字列ライブラリ(簡略版), Previous: srfi.129 - Titlecase手続き, Up: ライブラリモジュール - SRFI [Contents][Index]