イテレータ

外部イテレータを使って内部イテレータは作れるけど、
内部イテレータを使って外部イテレータは作れない。
...と今まで思ってたけど、普通に出来るな。どこでそう勘違いしてたんだろう俺?

class Iterator
	def initialize(it)
		cont = lambda do|ret|
			it.each do|x|
				ret = callcc do|cont|
					ret.call [cont,x]
				end
			end
			ret.call nil
		end
		@value = [cont,nil]
	end
	def current;@value[1];end
	def next;@value = callcc{|c|@value[0].call c};end
end

it = Iterator.new($<)
puts it.current while it.next

というわけでD言語に継続くださ(ry