2003-05-07 [長年日記]
λ. shift/reset その2
call/ccによるshift/resetの表現の続き。 shift/resetまだ良く分からないや。とりあえず、お約束のGeneratorを書いてみる。とりあえず動いてるみたいだけど、これって正しい?
class Generator def initialize(enum, eof = nil) @eof = eof reset{ shift{|k| @cont = k } enum.each{|item| shift{|k| @cont = k; item } } @cont = nil @eof } end def read @cont ? @cont.call : @eof end end
正しいみたい。reset/shiftがこの用途に向いてないことの例証かも。(^^;