Javascripitのお勉強ージェネレーター関数 Javascript Learning - Generator Function
Javascriptベースの強化学習DQNの非常に良いサンプルを発見したところまでは良かったのだが、Javascriptのプログラムが私の現状のレベルを遥かに超えるものだった。I found superb example for DQN on Javascript however, the level of programming was far beyond my level.
最初に遭遇したのが、このジェネレーター関数。The 1st enigma I encountered was this generator function.
様々なサイトに解説があり、大変お世話になったが、これは、Lots of web sites kindly explain and I appreciate them very much. Generator has characteristics like below,
1)配列を生成し、配列用のメソッドを準備してくれる配列生成関数であること It generates array with method. It is an array generating function.
2)参照されるたびに配列要素を一つ一つ生成すること It generates array elements each time it is called, one by one.
3)関数の後ろに*をつけ、配列要素の生成にはyield文を使うこと Have * suffix and use yield statement to generate array elements.
などの特徴がある。
さあ、上のプログラムを実行させると、コンソールに何が出てくるだろうか?Now what will come out to console when it runs.
文字cを表示した後、要素を引き出すたびにbが表示されている。 As in the right hand side view, after displaying character "c", character "b" is shown each time element is referred.
即ち、配列が定義時var g = gfn(1, 3);に生成されているのでなく、引き出されるたびに逐次実行生成されることが分かる。This indicates that array is not generated when the definition is made at var g = gfn(1, 3); but generated each time when it is referred.
昔のプログラムと異なり、Javascriptでは、単一のプロセスではあるが、様々な機能が同時に実行され、現在解析中のDQNプログラムもそれを多用している。まだまだ挑戦は続きそうだ。Unlike old program, in Javascript, many functions are executed simultaneously although they are in the same process. Currently analyzing DQN program looks making use of such functionality a lot. Challenge continues...