タグ

関連タグで絞り込む (0)

  • 関連タグはありません

タグの絞り込みを解除

JavaScriptとhaskellとyieldに関するishideoのブックマーク (2)

  • JavaScript のジェネレータ

    JavaScript のジェネレータって? 処理のまとまり、すなわち関数 普通の関数 実行時には毎回新たな環境 (実行コンテキスト) が作られる ジェネレータ 実行環境を維持したまま中断・再開が可能 コルーチンの一種 コルーチン Python のジェネレータ JavaScript はこれを丸パクりにインスパイヤされた C# のイテレータ Ruby の Fiber etc... これからのプログラミング言語には必須機能? 基的な使い方 function fib() { var [a, b] = [1, 1]; while (true) { yield a; [a, b] = [b, a + b]; } } var g = fib(); g.next(); // => 1 g.next(); // => 1 g.next(); // => 2 g.next(); // => 3 g.next

  • 無限リストと遅延評価: Days on the Moon

    IT 戦記で Haskell のリストを JavaScript で書くというのをやっている。これは面白い。ただ、そのまま書くと無限リストが無限再起に陥ってしまうので、遅延評価を行わなくてはいけない。 関数式を使った遅延評価 JavaScript で遅延評価を行うにはどうすればいいか。その答えのひとつが関数式だ。リストの各セルを、先頭の値と後続のリストという構造ではなく、先頭の値と後続のリストを返す関数という構造にしてやれば、リストの最初のセルを評価した時点で残りのセルがすべて評価されるという事態を防げる。 具体的には、リスト構築の際、後続のリストそのものの代わりにリストを返す関数を渡し、後続のリストを得るときは関数呼び出しを伴うようにすればよい。なお、ここでは空リストを表現するのに nil という特殊な値を用いる。nil は先頭の値も後続のリストも nil 自身であるリストである。 var

  • 1