タグ

2010年3月2日のブックマーク (7件)

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

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

    mooz
    mooz 2010/03/02
    ジェネレータも使う
  • jsscheme test

    Tiny Scheme implementation with javascript description 言語開発合宿で作成した、Scheme(的なもの)のjavascript実装です。 継続と末尾再帰最適化まで実装しました。継続のほうは当に仕様を満足しているかどうか不安ですが。 マクロは、ありません 詳しい説明はblogのほうに。 features parse SExpr variable reference create/call closure tail-call optimization continuation quote ('expr) , dotted pair( (x . y) ) , comment( ;; ) etc is not supported. console hold log Examples basic operations 1 (define x 1

    mooz
    mooz 2010/03/02
    scheme 処理系. Gin を使用.
  • JavaScript で構文解析: Days on the Moon

    C++ の特徴のひとつである演算子オーバーロード、その粋を極めたのが Boost Lambda (無名関数) と Boost Spirit (構文解析) ではないかと思っています。JavaScript では無名関数が使えるので Lambda に関しては間に合っているとも言えますが、Spirit はそうも行きません。JavaScript 2 で演算子オーバーロードがサポートされるのならチャレンジしてみようかななどと思ってそれきりになっていました。 しかし、一部でパーサブームが起こっているというのを受け、Perl 6 Rules をつらつらと眺めているうち、正規表現のメタ文字を使えば文法定義をきれいに書けるのではと思い至りました。そこで実際に JavaScript でパーサジェネレータを作り、Spirit にあやかって Gin (ジン) と名づけてみました。 文法定義 正規表現リテラルを使うこ

  • Clojure + Emacs - Mike DeLaurentis

    There are many different ways of providing Emacs with a Clojure REPL for a project. A few people have asked me how to do this recently, so I thought I’d mention the different methods I’ve used. Shell scriptYou can create a command-line script that runs java, executing the clojure.main class with an appropriate classpath set up.  Then add something like this to your Emacs lisp. Then from within Ema

    Clojure + Emacs - Mike DeLaurentis
  • not found

    mooz
    mooz 2010/03/02
    macro を利用.
  • Emacs でファイルをsudoで開き直す

    tramp の最初の一回目の認証で待たされる感覚が嫌いなので、私はよくsudo をやらずにそのままファイルを開いてしまいます。そうして「ああ、やっぱり編集したい」となり、sudo で開きなおします。 作業の流れ的に美しくありませんし、毎回引っかかるのでストレスにもなります。 vim ですと「:e sudo:%」でカレントファイルを sudo で開きなおしてくれるようです。いいなあ。 ということで 自動的に sudo で開きなおしてくれる機能を作ろうかと思ったら、すでにあったのでそれを導入します。 元のlispは、書き込み不可なファイルすべてをsudoで開きなおすか聞いてくるのでうっとおしいので、少し修正しました。 root所有なファイルを開いた時だけ、sudoで開き直すか聞いてくるようにしました。 以下を ~/.emacs にコピペしします。 (defun file-root-p (fil

    mooz
    mooz 2010/03/02
    tramp が絶賛不調中なので助かる.
  • What the JavaScript RegExp API Got Wrong, & How to Fix It

    Over the last few years, I've occasionally commented on JavaScript's RegExp API, syntax, and behavior on the ES-Discuss mailing list. Recently, JavaScript inventor Brendan Eich suggested that, in order to get more discussion going, I write up a list of regex changes to consider for future ECMAScript standards (or as he humorously put it, have my "95 [regex] theses nailed to the ES3 cathedral door"

    mooz
    mooz 2010/03/02
    RegExp