0755デフォルトの名無しさん
2014/12/05(金) 23:20:42.11ID:5SBzstV5> 今のブロック付きメソッド呼び出し(昔はイテレータと呼んでいた)が
> CLUのイテレータから発想を得た…というだけで。
ここは違うと思うな
どちらかといえば Ruby が CLU から強い影響を受けたのは、
要素を返すのに yield 構文を用いる、いわゆる「内部イテレータ」だと思う
たとえば >>737 の 1 から 3 の範囲を CLU では以下のイテレータで表現する
from_to = iter(first:int, last:int) yields(int)
n:int := first
while n <= last
yield(n)
n := n + 1
end
end from_to
これを Ruby では以下のように書ける
def from_to(first, last)
n = first
while n <= last
yield n
n += 1
end
end
yield というイテレータ向けに専用の構文を用いる内部イテレータは、汎用的な外部イテレータ、
いわゆるジェネレータよりも反復処理の抽象化を簡潔に表現できる
内部イテレータは CLU で生まれ Ruby が継承した(Smalltalk/Java/C++/Python 等には)存在しない特徴