Let's start Scheme

2014-09-12

SRFI-28の紹介

(LISP Library 365参加エントリ)

SRFI-28は基本な整形文字列です(訳難あり)。CLでおなじみのformat手続きをSRFIで提供するというものです。ただし、使用できる置換文字は~a~sのみの非常に基本的なものです。(名前どおりですね)

使い方は以下の通り。
(format "~a~%" Hello world)
;; -> "Hello world"
CLと違い、format文字列の前に#tを入れてもエラーになります。~adisplay~swriteが使われます。

参照実装では与えられたformat-stringをリストにしていますが、処理系によっては文字列の参照はO(1)で行われるのでstring-refで行った方が高速になるかもしれません。メモリスペースも多少節約できます。ひょっとしたら処理系によっては文字列は文字のリストでstring->listが時間、空間ともにO(1)で終わるものもあるかもしれません(少なくともR5RS以降では規格違反ではありますが)。
 
今回はSRFI-28を紹介しました。

4 comments:

Shiro Kawai said...

R7RSでは文字列の参照・変更をO(1)でやる必要はないですよ (わざわざ明記してあります)。

kei said...

はい、なので「処理系によっては」と断りを入れています。

kei said...

R5RS以降というのはstring->listがメモリ空間O(1)になる部分にかかる予定だったのですが、string-refにもかかるように読めますね・・・orz

Shiro Kawai said...

ああ、そちらのことでしたか。勘違いしました。string->listは毎回新しいリストをアロケートしないとならないので規格どおりにしたらO(1)にはできませんね。

Post a Comment