文字列

朝っぱらからパン食べ過ぎ。昼飯の準備もできたし、腹ごなしに目覚めのscheme(?)。というか真横で塊魂を嗜む息子(2歳)。うーん、変な家庭 ・ω・

文字

#\ かなるほど(そんだけかよ)。
#\spaceとかもつかえるらしい。他に何があるのかな、、とread.cを見ると

    { "space",        SCM_MAKE_CHAR(' ')  },
    { "newline",      SCM_MAKE_CHAR('\n') },
    { "nl",           SCM_MAKE_CHAR('\n') },
    { "lf",           SCM_MAKE_CHAR('\n') },
    { "return",       SCM_MAKE_CHAR('\r') },
    { "cr",           SCM_MAKE_CHAR('\r') },
    { "tab",          SCM_MAKE_CHAR('\t') },
    { "ht",           SCM_MAKE_CHAR('\t') },
    { "page",         SCM_MAKE_CHAR('\f') },
    { "escape",       SCM_MAKE_CHAR(0x1b) },
    { "esc",          SCM_MAKE_CHAR(0x1b) },
    { "delete",       SCM_MAKE_CHAR(0x7f) },
    { "del",          SCM_MAKE_CHAR(0x7f) },
    { "null",         SCM_MAKE_CHAR(0)    },

てな感じ。なるほど。htってなんだろうってhorizontal tabかな。

文字列

基本immutableなのか。80%のほうを最適化するのは流石だとか思った。整数の話もそうだけど、設計する側の視点でモノを見る、というのは重要だとか思った。ツッコんでもらえたのはものすごい幸運だった。感謝しまくり。
write-to-string <-> read-from-stringで簡易シリアライズと。

gosh> (read-from-string (write-to-string '(a b c)))
(a b c)

あとは joinとか appendとか変換とかかな。ふむむ。

文字列補完とか

#` で文字列書いて ,の後ろのS式が展開。変数を展開したいだけのときは ,|var|のように||でくくると安全。これは変数専用でapplyを書くとエラー。

gosh> #`"hoge,|(* 4 52)|,"
*** ERROR: unbound variable: |(* 4 52)|
Stack Trace:
_______________________________________
  0  (x->string |(* 4 52)|)
        [unknown location]

まあS式は区切りが明らかだし当たり前か。空白で区切れない場合にカンマ自身を明示的に出したい場合は ,,(ダブルカンマ)。
確かに普通の文書なら , の後は空白であることが殆どか。全角スペースはどうだろう?

gosh> #`", "
*** ERROR: unbound variable: 臓臓
Stack Trace:
_______________________________________
  0  (x->string 臓臓)
        [unknown location]

ははは、やっぱダメか。