YIELD関数を作ってみた

現在、前の投稿で考えていたYIELD関数を作っています。機能は少し変わりました。実際に作っているYIELD関数はYIELD(関数名, 引数1, 引数2,..., '変数1 変数2 ...')でジェネレーターオブジェクトを生成します。NEXT(ジェネレーター)で最後の引数で指定した変数1,変数2,..の値が変化するたびに値を配列にして返します。関数の処理が終わると代わりに0を返します。例えば

procedure range(n)
  i <- 1
  A <- []
  while i <= n do
    A[i] <- i
    i <- i + 1
  end-while
  return A
end-procedure
g <- YIELD(range, 3, 'i A')
v <- NEXT(g)
while v /= 0 do
  print('%s\n', v)
  v <- NEXT(g)
end-while

と書けば、次のように出力されます。

[1, []]
[2, [1]]
[3, [1, 2]]
[4, [1, 2, 3]]

デモ動画も良かったらどうぞ