For Gauche 0.9.11Search (procedure/syntax/module):

Next: , Previous: , Up: ライブラリモジュール - SRFI   [Contents][Index]

11.27 srfi-130 - カーソルを使う文字列ライブラリ

Module: 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-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にあるものと同じです (文字列ライブラリ(簡略版)参照):

string-replicate   string-remove      string-split

以下の手続きはsrfi-13の同名の手続きと異なり、インデックスではなく文字列カーソルを返します。 以下で詳しく説明します。

string-index        string-index-right
string-skip         string-skip-right
string-contains     string-contains-right
Function: string-index string pred :optional start end
Function: string-index-right string pred :optional start end
Function: string-skip string pred :optional start end
Function: string-skip-right string pred :optional start end

[SRFI-130] {srfi-130} Find the position of a character that satisfies pred (string-index/string-index-right), or does not satisfy pred (string-skip/string-skip-right), in a string.

While srfi-13’s procedures of the same names returns integer index, these returns a string cursor instead.

They always return a string cursor. The returned cursor from string-index/string-skip points the leftmost character that satisfies/does not satsify pred, while the returned cursor from string-index-right points the next (right) character of the rightmost one that satisfies/does not satisfy pred. If there’s no character that satisfies/does not satisfy pred, string-index and string-skip returns a cursor at the end of the string, while string-index-right and string-skip-right returns a cursor at the beginning of the string.

(This is easier to understand if you think the cursor is between characters; if we scan a string from left to right, the cursor looks at the character on its right; if we scan from right to left, the cursor looks at the character on its left.)

The optional start/end can be string cursors or integer indexes to limit the region of string to search.

(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
Function: string-contains haystack needle :optional start1 end1 start2 end2
Function: string-contains-right haystack needle :optional start1 end1 start2 end2

[SRFI-130] {srfi-130} Search for a substring needle in a string haystack. The substring is searched from left to right (string-contains) or right to left (string-contains-right).

While srfi-13’s procedures of the same names returns an integer index when a substring is found, these procedures returns a string curosr of haystack.

If haystack doesn’t countain needle, they return #f.

Function: string-for-each-cursor proc string :optional start end

[SRFI-130] {srfi-130} Calls proc with each cursor of string, from left to right, excluding the post-end cursor. This is the cursor version of string-for-each-index in srfi-13 (see 文字列のマッピング).


Next: , Previous: , Up: ライブラリモジュール - SRFI   [Contents][Index]


For Gauche 0.9.11Search (procedure/syntax/module):