ヒビノキロク RSSフィード

Firefox 3 - The best Firefox yet RSS feed meter Creative Commons License

移転しました。現在ははてなグループの方で細々と更新しています。(移転理由)

2003 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2004 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 02 | 05 |

2006/03/26 (Sun)

Javascriptで継続渡し

| 17:30 | Javascriptで継続渡しを含むブックマーク Javascriptで継続渡しのブックマークコメント

id:nozom:20060317#1142577630の続き。世界で最も誤解された言語とも呼ばれるJavascriptを使って継続渡しを書いてみた。

なお、Javascriptの処理系としてRhino*1を使った。参考文献は『入門Javascript』(ISBN:4756138713)。

function fib(n) {
    if ((n == 1) || (n == 2))
        return 1;
    else
        return fib(n - 1) + fib(n - 2);
}

function fib_cps(n, k) {
    if ((n == 1) || (n == 2))
        return k(1);
    else
        return fib_cps(n - 1, function(v1) {
            return fib_cps(n - 2, function(v2) {
                return k(v1 + v2);
            });
        });
}

function fib_test() {
    for (var i = 1; i < 10; i ++) {
        var n = fib_cps(i, function(v) { return v; });
        print("Fibonacci(" + i + ") = " + n);
    }
}

fib_test();

実行結果

% java -jar js.jar fib.js
Fibonacci(1) = 1
Fibonacci(2) = 1
Fibonacci(3) = 2
Fibonacci(4) = 3
Fibonacci(5) = 5
Fibonacci(6) = 8
Fibonacci(7) = 13
Fibonacci(8) = 21
Fibonacci(9) = 34

このように、Javascriptは極めてSchemeっぽく書くこともできることがわかった。(実際何度も括弧を付ける位置を間違えた)

Schemerから見たJavascriptの特徴(とりあえず気付いたものだけ):

  • 括弧の位置が違う
  • 要素の区切りにカンマが必要
  • 演算子は中間記法
  • lambda→function
  • 多値がない
  • 値を返すにはreturnが必要
  • リストがない(代わりにArrayを使う)
  • map系の関数がない
  • call/ccがない(Rhinoには継続の実験的なサポートがあるらしい*2 )

この辺のことに気をつければ、JavascriptLispの亜種だと思っても問題なさそう。

買った本

| 23:25 | 買った本を含むブックマーク 買った本のブックマークコメント

愛蔵版 三毛猫ホームズの推理 初恋マジカルブリッツ―大好きです、あなたにだけは伝えたい! (集英社スーパーダッシュ文庫) テレパシー少女「蘭」(2) ねらわれた街 後編 (シリウスKC) 増補改訂版 Java言語で学ぶデザインパターン入門 マルチスレッド編

S-Fマガジンは巻頭に梶尾真治の新作『怨讐星域』が20ページほど掲載。タイトルを見る限りでは、かなりハードなスペースSFっぽい話になりそう。スペースSFといえば、『サラマンダー殲滅』も復刊してくれないかな。

carbunclecarbuncle 2006/03/27 00:45 JavaScriptウワサには聞いてましたがなかなかパワーのある言語ですね。ところで、C#でほとんど同程度のコードが作れました。良かったら見てみてください。

carbunclecarbuncle 2006/03/27 01:01 あ、そのプログラムはあとでnozomさんのJavaScriptプログラムとかなり似せた形で掲載しています。言語的比較すると楽しいです。

nozomnozom 2006/03/28 11:04 >言語的比較すると楽しいです。
そうですね。今のところScheme, C#, Java, Javascriptですか。こうなったらできるだけ多くの言語で書いてみましょうか。(あとはPerlとCぐらいしか書けないけど。できればRubyも入れたいな)

さくらいさくらい 2006/03/28 16:30 というわけで、pythonで書いてみました。nozomさんのjavascriptのコードまんまですが(w

nozomnozom 2006/03/28 16:47 やった。僕はPythonは全く知らないのでとても興味深いです。
ちなみに、http://wataru.aoisakura.jp/tdiary/?date=20060328#p04 ですね。
(トラックバックとか来てなかったので勝手にリンクを書いちゃいました)