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がこの用途に向いてないことの例証かも。(^^;