--- title: '第13章: 文字と文字列の処理' author: kazu634 date: 1969-12-31 url: /1970/01/01/_13/ wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:4347;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - gauche - Lisp ---

プログラミングGauche』の勉強を再開。気になった部分だけ抜き書き

文字の種類を判断する述語

文字列の基本操作

gosh> (string? "aaa")
#t
gosh> (define str "aaa")
str
gosh> str
"aaa"
gosh> (string? str)
#t
gosh> (string-length str)
3
gosh> (string-ref str 1)
#\a

正規表現

正規表現は「#/正規表現/」という形式で表現する。正規表現のパターンに文字列がマッチするかどうかを調べるためにはrxmatch手続きを用いる。

gosh> (rxmatch #/^a/ "abc")
#<<regmatch> x3c37c>

戻り値はマッチした情報を持つオブジェクトを返してくるよ。この戻り値を活用して

を取得できる。

gosh> (define m (rxmatch #/bc/ "abcd"))
m
gosh> m
#<<regmatch> x3c3f60>
gosh> (rxmatch-substring m)
"bc"
gosh> (rxmatch-before m)
"a"
gosh> (rxmatch-after m)
"d"

このマッチオブジェクトからマッチした文字列を呼び出す処理はよくあるから、シュガーシンタックスが用意されているよ。

gosh> (m)
"bc"
gosh> (m 'before)
"a"
gosh> (m 'after)
"d"

こんな風な感じ。