トップ «前の日記(2008-01-08) 最新 次の日記(2008-01-10)» 編集

Route 477



2008-01-09

[scheme] SRFI萌え

SRFIってのはSchemeの拡張ライブラリを定めたものなんだけど、リスト を見ると結構言語機能のコアに近いものが並んでいたりする。

で、各SRFIにはリファレンス実装のコードが載ってるんだけど、これがほとんどScheme自身で書いてあるのね。

言語コアはすごく小さいけど言語の拡張がユーザレベルでできるってのはやっぱ格好いいなぁと。

srfi-6(文字列を入出力ポートとして扱うライブラリ)とかSchemeレベルでどうやんの?と思ったら、 read-charとかwrite-charとかを全部再定義してた*1。なるほどなぁ。

*1 正確には、再定義というかラップしてる

[biwascheme] ポートを導入した

Schemeでは入出力は全部「ポート」を介して行うことになっているので、それっぽいコードを書いてみた。

(define sp (open-output-string))
(write '(1 2 3) sp)
(display "hoge" sp)
(print (get-output-string sp))  ;=> (1 2 3)hoge

こんなコードが動くようになった。

そのうち、ネットワーク上のファイルをopenしたり、ローカルのファイルにwriteしたり*1できるようにしたい。

*1 TiddlyWikiがやってるんだから、OS/ブラウザ依存な方法を使えばできるはず