正規表現と多値を実装 - Scheme VM を書く

鬼車を利用して正規表現サポートをさくっと実装。

((#/abc/ "123abcdef") 'after)
=> "def"

ちなみに正規表現R6RS の範囲外です。


ついでに多値を実装。

(call-with-values (lambda () (values 1 2 3)) (lambda (a b c) (+ a b c)))
=> 6


多値は後回しにしようかと思っていたのですが R6RS の (open-string-output-port) の戻り値が2つあるため急いで実装。
1. port
2. 取り出し手続き


取り出し手続きは SRFI-6 でいうところの get-output-string です。
取り出し手続きを返すというのは今までなかった気がする。それがありなら input-port などの read/read-char とかも返してくれてても良い気がする。
いやだめか明示的に open しないものがあるな。


なぜここだけ手続きを返すんだろう。うーん。なんだか気持ち悪い。