blog/content/post/1970-01-01-00000013.md

5.1 KiB

title author date url wordtwit_post_info categories
第13章: 文字と文字列の処理 kazu634 1969-12-31 /1970/01/01/_13/
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";}}
gauche
Lisp

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

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

  • char-alphabetic?: アルファベットかどうかを判断する
  • char-numeric?: 数字かどうかを判断する
  • char-whitespace?: 改行やタブといった空白文字かどうかを判断します
  • char-upper-case?: 大文字かどうかを判断する
  • char-lower-case?: 小文字かどうかを判断する

文字列の基本操作

  • 文字列のリテラル表記は、ダブルクォートで囲まれた文字の並び。
  • 文字列かどうかは述語string?で確かめられる。
  • 文字列の長さはstring-lengthで求められる。
  • 文字列のn文字目を取り出すにはstring-refを使う。
  • 文字列が空文字かどうかは、srfi-13モジュールのstring-null?で調べられる
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"

こんな風な感じ。