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

継続サーバを勉強中

Christian Queinnec の The Influence of Browsers on Evaluators or,. Continuations to Program Web Servers http://www-spi.lip6.fr/~queinnec/PDF/webcont.pdf を読みなおし中。 半年前に読んだけど、あれから自分の中で、限定継続、CPS、Hop、Haskell、…

Kahua

Kahuaはアプリケーションサービスを構築するための、継続ベースのフレームワークです。で、サンプルにカウンターを作る話がでてくる。 http://www.kahua.org/cgi-bin/kahua.fcgi/kahua-web/show/doc/hello-kahua#H-1o28l31 リンクをクリックすると、数をどん…

AJAXもCPSじゃん

function searchSales() { var url = 'http://yourserver/app/get_sales'; var myAjax = new Ajax.Request( url, { method: 'get', onComplete: showResponse }); } function showResponse(originalRequest) { //put returned XML in the textarea $('result…

以上。

なぜ spec ファイルを修正するの? rpmbuild --rebuild tetex-jisfont-1-6.src.rpm を実行すると、 警告: ユーザ t-matsuu は存在しません - root を使用します 警告: グループ supramol は存在しません - root を使用します 警告: ユーザ t-matsuu は存在し…

jsarticle jsbook などを扱えるようにする

http://homepage2.nifty.com/t-matsuu/install-memo/fc/tetex-jisfont.html http://homepage2.nifty.com/t-matsuu/install-memo/fc/tetex-jsclasses.html の src.rpm をダウンロード spec ファイルの修正と、インストール (tetex-jsclasses-060725-1.src.rpm…

tetex 関連をすべてインストール

yum install tetex*

ダークサイド

狂気 「There's no dark side of the moon really. Matter of facts it's all dark(本当は月の暗い側なんて存在しないんだよ。何故なら、すべてが闇そのものだからね)」という台詞(つまり、実際は何もかもただ「明るい」のは「ただ太陽の光が当たっている…

OCaml チュートリアル

OCaml チュートリアル 今日、Labels の日本語訳をコミットしました。 現在、このチュートリアルは 日、独、仏、伊 に訳されています。 日本語版はその中で最も、翻訳が進んでいます。 はじめの一歩 - 基本中の基本 OCamlプログラムの構造 データ型とパターン…

Winny 地裁 "有罪"

もう鍛冶屋の包丁議論は聞きあきた。意味がない。 学会に論文で発表の形をとっておけば、有利だっただろうに。

破壊的リスト操作専用の、Cons!

append、append!といった関数があるが、Cons Listをもらったら append 、 Cons! List をもらったら append! と、 型に応じたアルゴリズムを期待する。 Cons って"使うたびに変わる"のか? ・・・ "メモリアドレスが違う" だから、 (Cons'' 3 (Cons' 2 (Cons 1…

線形型。"財布"に!マークをつけておくと、この財布は"使うたびに変わるもの"とされる。1回以下しか参照できない。

上の例でいうと、自動で "その" が付いていくようなものだ。 線形型を扱う関数も線形型である。だから、"買う"も!マークがつく。 "財布"でみかんを買う "その財布"でりんごを"さらに買う"

線型論理では、財布への参照は1回以下と制限する。

だめな例: 財布でみかんを買う 財布でりんごを買う よい例: "財布"でみかんを買う "その財布"でりんごを買う

述語論理では、副作用を考えないので、例えば財布の中身のような、使うたびに変わるものが扱えない。

100円あれば みかんが買える 100円あれば りんごが買える だからといって、"100円あれば みかんが買える かつ りんごが買える" わけではない。

Linear Type(CleanのUniq Type)

Wadler の Linear Types Can Change the World! のゼミがあった。 古い論文なので、Clean の Uniq Type を見たほうが話が新しいかもしれない。 以下、自分の理解。

逆ポーランド記法

1 + 2 は、逆ポーランド記法で、1 2 + となる。 (1 + 2) * (3 - 4) は、 1 2 + 3 4 - * だ。 逆ポーランド記法なんて読めないと思うかもしれないが、日本語だと思えばスラスラ読める。 Forthの系譜、逆ポーランド記法の Joy や Factor をちょっと見てみた。…

javascript で roguelike を書いているやつがほとんどいない!これは狙いめだ。

Linear Type

来週のゼミで、Wadler の、 Linear types can change the world! をやるらしいので、読んでみた。線形型の値は、コピー無用、破壊的代入上等。 コピー無用とは、例えば、銀行口座への参照は必ずひとつだけと保証することで、SICPであったような、reader & wr…

従って、関数単位の、極小のCGIの群を作りやすい。

関数単位のCGIから、Ajaxでちびちび結果を受けとって、組み合わせるというスタイルが可能。 HTTPサーバの機能はApacheに任せて、他の、CGI+Ajax+DHTMLの自動化の部分は切り離せないだろうか?

無名サービス

πを返す CGI を、 (define-service (pi) (* 4 (atan 1)))などと設置したり。 だが、無名関数がSchemeにあることから連想して、無名CGIを考えてみよう。 それが $ 記法で、 (<HTML> (<BODY> (<BUTTON> :onclick ~(alert $(* 4 (atan 1))) "Click me to see an approximation of PI</button></body></html>…

Hopを使うと、この作業を自動化できる。

(define-service (server-date) (current-date)) (<HTML> (<BUTTON> :onclick ~(with-hop ($server-date) (lambda (h) (alert h))) "Server time"))と書いてやると、 Hop はそれ自体がHTTPサーバ。 define-service で、自動で CGI を設置してくれる。 HTMLは、タグをS式で</button></html>…

普通のやりかた

私たちの手元にあるのは、HTTPサーバと、CGIと、Javascriptと、Ajaxだ。 HTTPサーバを立てる。 CGIを Bigloo (Scheme処理系) で書いて設置。例えばURLは、http://hoge.com/serverdate.cgi HTMLを書く。Ajax なら、 prototype.js を使おう。こんな感じ。 <html> <head> <script src="prototype.js" type="text/javascript"></script> <script type="text/javascript"></head></html>

Hop の仕組み

Hop, a Language for Programming the Web 2.0をわかりやすく説明しようと思う。サーバ側の現在時刻を、Ajaxで受け取って、動的に表示するHTMLを書くことを考える。

OCaml アプレットが常識だったらなぁ。

もしも、ブラウザの上にのっているのが OCaml の VM で、 OCaml で書いたアプレットを動かせていたら、もっとよかった。 もちろん、 Scheme のアプレットもいいし、 Haskell のアプレットもいい。 ブラウザの上にそういう VM を載せやすくするための仕組み、…

ブラウザでクライアント側だの、サーバ側だの

と考えていると、分散システムのPlan9の考え方というのは、よだれがでるくらいにうまい話だとつくづく思う。 しかし、普及しなけりゃ絵に描いた餅だ。 現在、ブラウザの上に、Javascript の VM だの Java の VM だのがのっているわけで、この VM 同士を 分散…

OCaml をブラウザで実行できたら

今週の OCaml nagoya で、「OCaml をブラウザでクライアント側で実行できたら面白い」という話になり、皆で検討した。 そういえば、アラン・ケイもそんなことを言っていた。 http://itpro.nikkeibp.co.jp/a/it/alacarte/interview0626/alan_5.shtml Webの技…

Haskellを悪く言う人は

Haskellを良く言う人は、Haskellを十分わかっていない。 Haskellを悪く言う人は、Haskellを全くわかっていない。それはさておき。http://www.ocaml-tutorial.org/ja の翻訳が進んでいます。 今日、If Statements, Loops and Recursion の邦訳をコミットしま…

CPS 継続渡しスタイル がわかってきた。

range 関数を考える。シンプルに、 (define (range a b) (if (> a b) [] (cons a (range (+ a 1) b))))これは、最後に呼び出される関数が cons なので、末尾再帰ではない。末尾再帰にすると、 (define (range a b l) (if (> a b) (reverse! l) (range (+ a 1…

16x16数独、解決しました。

アルゴリズムを改良したら、高速に解けるようになりました。 http://tsukimi.agusa.i.is.nagoya-u.ac.jp/~sydney/ocaml/index.php?%A5%CD%A5%BF%B5%AD%CF%BF%B8%CB 002g0000b0a00300 5b00d0f00e000ca0 f00001b020d0g070 0cd03702050f00b0 000b5000a0800047 d…

Haskellはとんでもないものを盗んでいきました。printfデバッグです

16x16の超難問数独が、例のプログラムを 8時間@Pen4 2.6GHz ぶんまわして解けないってのは、どうも解せない。 そんなものを人間が解けるだろうか・・・。多分、アルゴリズムに改良の余地があるはずだ。Schemeの、and、or関数がやってることは、遅延評価だな…

遅延評価なら継続いらないかもね。

昨日の、答えがひとつ見つかったらすぐ大域脱出というのは、遅延評価のHaskellでは、複数解をいれるつもりのリストにheadをかければよいらしい。Haskellすげー。継続いらないかもね。