Chapter 2 データ型 - 2.2 合成データ型 - 2.2.1 文字列
今日から合成データ型ですってよ。文字列は文字のガッチンコみたいですよ。
文字列:
gosh> "Hello, World!" "Hello, World!"
世はなべて事もなし
文字から文字列を合成するには string という関数を使う:
gosh> (string #\H #\e #\l #\l #\o) "Hello"
一応やっておこう:
gosh> (string "He" #\l #\l #\o) *** ERROR: character required, but got "He" Stack Trace: _______________________________________
はい、文字列は引数にとれません。
グローバル変数を作って、
gosh> (define greeting "Hello; Hello!") greeting gosh> greeting "Hello; Hello!"
インデックスアクセス:
gosh> (string-ref greeting 0) #\H gosh> (string-ref greeting 1) #\e
別にグローバル変数じゃなくてもいんじゃね?
gosh> (string-ref "Hello" 2) #\l
ん? Ruby の文字列はインデックスアクセスしたら数値を返すけど(この仕様嫌い……)、Scheme はそのまま使えるのかな?
gosh> (display (string-ref "Hello" 0)) H#<undef>
だよね。使えるよね。文字型だもの。
文字列連結。複数の文字列から単一の文字列を合成と言うべきか:
gosh> (string-append "E " "Pluribus " "Unum") "E Pluribus Unum"
ktkr! 全国の月刊ムーファンの皆様お待たせしました!「多から一へ」ですよ! 秘儀っぽい! SICP の表紙と合ってる!
# ktkr の脳内略語はまだ思いつきません(TODO)。
文字列と文字の連結はどうかな?:
gosh> (string-append "Hell" #\o) *** ERROR: string required, but got #\o Stack Trace: _______________________________________
だめかーww
gosh> (string-append "Hell" (string #\o)) "Hello"
ポリモーフィズムが欲しい気もすぃ。display ってポリモーフィズムの粉がかかってるよね?
長さ指定で文字列を作れる。作ったものが可変だったら固定長の意味ないようなあるような。高速化に使うの?
gosh> (define a-3-char-long-string (make-string 3)) a-3-char-long-string
中身は何だろ?:
gosh> a-3-char-long-string " "
な、半角スペースで埋めるの? いいの?これ? nil みたいなので埋めるかなぁと思ったけど。うん、いいか。実用的に。
gosh> (define hello (string #\H #\e #\l #\l #\o)) hello gosh> hello "Hello" gosh> (string-set! hello 1 #\a) #<undef> gosh> hello "Hallo"
(string-set! 文字列 インデックス 文字) で文字列のインデックス番目の要素を文字で上書きね。
今日はここまで。