SRFI-28は基本な整形文字列です(訳難あり)。CLでおなじみのformat手続きをSRFIで提供するというものです。ただし、使用できる置換文字は
~a
と~s
のみの非常に基本的なものです。(名前どおりですね)使い方は以下の通り。
(format "~a~%" Hello world) ;; -> "Hello world"CLと違い、format文字列の前に#tを入れてもエラーになります。
~a
でdisplay
、~s
でwrite
が使われます。参照実装では与えられたformat-stringをリストにしていますが、処理系によっては文字列の参照はO(1)で行われるのでstring-refで行った方が高速になるかもしれません。メモリスペースも多少節約できます。ひょっとしたら処理系によっては文字列は文字のリストでstring->listが時間、空間ともにO(1)で終わるものもあるかもしれません(少なくともR5RS以降では規格違反ではありますが)。
今回はSRFI-28を紹介しました。
4 comments:
R7RSでは文字列の参照・変更をO(1)でやる必要はないですよ (わざわざ明記してあります)。
はい、なので「処理系によっては」と断りを入れています。
R5RS以降というのはstring->listがメモリ空間O(1)になる部分にかかる予定だったのですが、string-refにもかかるように読めますね・・・orz
ああ、そちらのことでしたか。勘違いしました。string->listは毎回新しいリストをアロケートしないとならないので規格どおりにしたらO(1)にはできませんね。
Post a Comment