2009-01-01から1年間の記事一覧

はじめての圏論 - しりとりの圏

お久しぶりデス。わかりやすかったので、自分なりにまとめてみる。はじめての圏論 その第1歩:しりとりの圏 - 檜山正幸のキマイラ飼育記チュートリアルに従い、しりとりの圏について考える事にする。 とりあえずしりとりの圏の定義 集合関係 対象 ひらがな文…

マインドマップを書き出してみた

Web上でマインドマップが書けるツール思考マップ作成 Web アプリケーション - MindMeister使ってみた。僕の頭の中ってこんなにフクザツだったんだと実感した。使い方はチュートリアルの動画見ればわかると思う。 しかし・・・ 無料版では3つまでしかマインド…

サマーウォーズ

突然2時間くらい暇になったので、映画見てきた。 最近の映画の事がよくわからないので、適当に「時をかける少女」の細田監督作品と書いてあった「サマーウォーズ」を選んでみたのだが、10回くらい泣いてしまった。こんなに泣いた映画は久しぶりかもしれない…

松下幸之助

ふらっと本屋に寄って数ページ読んで、そのままレジに直行してしまった。道をひらく作者: 松下幸之助出版社/メーカー: PHP研究所発売日: 1968/05/01メディア: 文庫購入: 42人 クリック: 420回この商品を含むブログ (143件) を見る一代で世界に登りつめる人の…

イントロソート

ちとメモイントロソート - Wikipedia イントロソート(英: introsort)は、David Musser が1997年に設計したソートアルゴリズムである。最初はクイックソートを行い、再帰のレベルがソートされた要素数(の対数)を超えるとヒープソートに切り替える。最悪で…

SICPを読む(110) 3.3.5 制約の拡散

熱い。熱すぎる。もっと頭を熱くするにはSICPがいいよね。 今回は制約システム(プログラミング)を利用して方程式を解けるようにするらしい。 ところで制約システム(プログラミング)ってなんぞ? 制約プログラミング - Wikipedia ほうほう。Prologみたいなも…

JavaScriptで多値

JavaScriptを使って継続渡し形式と多値の復習。 1と2を返して、後で足し算する。 alert(function (cont) { return cont(1, 2); }(function(a, b) { return a + b; })); // 3 実際には、足し算をするという継続を渡して、ほにゃららして、最後に継続を実行す…

束縛

ふとした疑問。 gosh> ((lambda (x x) x) 1 2) 1 へぇぇ。 MzSchemeはエラーだった。 ついでに。 Fierfox alert(function(x, x) {return x;}(1, 2)); // 2 へぇぇ。

Schemeをつくろう(22) - JavaScriptのメモ

JavaScriptでSchemeを作る為に必要なことをメモっとく。 字句解析 tokenize = function(src) { return src.match(/\(|\)|'|[^\s()']+/g); }; // tokenize("(hello Javascript and Scheme world !!)") // => #(( hello Javascript and Scheme world !! )) 配…

Biwa Schemeを読む(3) - コンパイラ〜インタプリタ

ここからが本題。CompilerとInterpreterは一緒に読んだ方がよさげ。Biwa Schemeの中間言語は[命令,値(複数),次の命令]という形になっていて再帰的な構造をしているようだ。 命令一覧 halt 終わり。 constant 値 レジスタに値を入れる。 argument レジスタの…

Biwa Schemeを読む(2) - パーサー

まずはパーサーを読む。2段階に分けてある様子。 トークンに分ける(tokenize) 一気にS式に変換するのではなく、文字列をトークンに分解している。 S式に変換(getObject) 型付けをしながらS式に変換。 正規表現があると楽チンらしい。 感想など ここまでは今…

Biwa Schemeを読む(1) - データ構造

stackbase.jsを読み進める。データ構造を理解していこう。 環境系 TopEnv トップクラスの環境。いわゆるグローバル変数とか、グローバル関数だとか。 CoreEnv 今のところ謎。 Symbols シンボルテーブル。Symbolクラスが入ってる。 データ構造 eof なんだろ。…

Biwa Schemeを読む(0) - 斜め読み

仮想マシン クロージャやら末尾再帰の最適化やら継続やらをなんとか理解できるようになってきた。しかし、中間コードを生成し, 仮想マシンで・・・と言われると何のことやらちんぷんかんぷんだ。 こんな感じ? 僕のイメージとしては、パーサーを通してS式に…

caseには式

久しぶりに更新してみるよ。 var k = 3; switch (k) { case 1 + 2 : alert("caseに式が使えるよ!"); break; } ifと変わらん。