タグ

ブックマーク / nanto.asablo.jp (4)

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

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

  • Kanasan.JS JavaScript 第 5 版読書会 #2: Days on the Moon

    Kanasan.JS の JavaScript 第 5 版読書会 #2 へ行ってきました。今回は午前ライトニングトーク、午後読書会という二部構成。他の参加者の感想等は参加者のブログ記事一覧からどうぞ。参加人数が 50 人近くという大規模な読書会を企画し、無事成功に導いてくださった Kanasan さんはじめスタッフの方々、そして参加者の皆さん、当にありがとうございました。 ライトニングトーク Lightning Talk 一覧および Lightning Talk 発表資料一覧から各 LT に関する情報が見られます。 Mozilla Developer Center 翻訳事始 私も LT に参加したのですが、JavaScript に関することなら何でも OK とあるのを見落としていてほとんど関係ない話 (一応翻訳作業の実演は Core JavaScript 1.5 リファレンスの arug

  • 再帰クイックソートの可視化: Days on the Moon

    「いやなブログ - JavaScript でソートアルゴリズムを可視化」より。何も考えずに再帰処理のクイックソートの様子を逐次描画しようとするとこうなります。 function quickSort(data, begin, end, log) { if (begin >= end) return data; var pivotPos = begin; var pivot = data[pivotPos]; for (var i = begin + 1; i < end; i++) { if (data[i] < pivot) { var temp = data[i]; data[i] = data[pivotPos + 1]; data[pivotPos + 1] = data[pivotPos]; data[pivotPos] = temp; pivotPos++; } } log(da

  • userChrome.js 用スクリプト: Days on the Moon

    userChrome.js にずいぶんお世話になっていると書いたので、現時点で私が使っている userChrome.js 用スクリプトを公開。必要最低限の機能に絞り込める、細かいところに手が届くのがいいところ。 UCJS Loader Sub-Script Loader の改良版。UTF-8 マルチバイト文字、JavaScript 1.7 の機能が使用可能に。Build ID 20070109 以降の Trunk では Bug 364692 修正の影響で (?) 動作しなくなっているようです。Sub-Script Loader なら問題はありませんが、日語文字をそのまま使いたいといった場合にはバグ対応版をどうぞ。(少々トリッキーな手段でバグを回避しているので、最新の Trunk を使っている人以外は通常版を使ってください。) 原因となっていた (?) バグはすでに修正されており、バグ対応

  • 1