This page contains basic and probably outdated information about Weblocks. For more details please visit the new web page. You can also check out our demo application to get a first impression. What is Weblocks? Weblocks is a continuations-based web framework written in Common Lisp. Why another web framework? Weblocks uses powerful Lisp features like multiple dispatch, metaobject protocol, lexical
継続、continuationと来ればやはりSchemeの話になるのだろうか。一般社会で schemeと言えば「すきーむ(n)計画。陰謀。」であるがソフトウェア業界で Schemeと言ったらLispの一種のことだ。Lispには変種が腐るほど存在するが、 Common Lispと並んで有名なのがSchemeである。Common Lispが標準化の課程でゴテ ゴテと装備して巨大化したのに対し、Schemeは遥かにコンパクトでクリアな仕 様を持つ。またSchemeとは言語の一般名であり、その実装にはGaucheとか scmとかguileとかMIT Schemeなどがある。 さてCall/CC、正式名称Call with Current Continuation、について 説明しよう。Call/CCはちょっと見はsetjmp/longjmpと同じように見えるのだが、 スタックが深くなる方向にもジャ
昨日の時点ではまだバグがあったが、そのバグも直った。たぶんこれで完成したと思う。最終的にはスタックですらなく、単に現在の継続を覚えておくだけで良くなった。これは継続自身に次に処理を渡すべき継続の参照を持たせることにしたためで、こうしないと継続を再利用した時に問題が出る。 昨日は結果しか書かなかったので、継続について少し解説を。 > (+ (call/cc (lambda (x) (x 1) 2)) 3) ==> 4この例では、xにcall/ccの外側への継続が束縛されているので、xを呼ぶと(call/cc ...)全体がその引数と置き換わり、全体としては(+ 1 3)を計算することになる。いわゆる大域脱出の例。 別の例: (define cont #f) ==> #f (+ (call/cc (lambda (x) (set! cont x) 1)) 2) ==> 3 (cont 5) =
なんかゴニョゴニョやってるうちに出来たみたい。 > (+ (call/cc (lambda (x) (x 1) 2)) 3) ==> 4 以下のページなども参考にしつつ、継続スタックを自前で管理することで実現した。継続に対応させるために、プリミティブ関数の実装がとても力業になってしまった。 Schemeを作ろう 第3回 http://www.jah.ne.jp/~naoyuki/Writings/VScheme3.html それと、レキシカルスコープは意外に簡単に実装できた。要するにオブジェクトの値を求める時に、評価するときの環境じゃなくて定義した時の環境を使えばいい。定義する場所と評価する場所が異なるのは関数オブジェクト(==lambda式)の中だけだから、結局は関数に定義した時の環境を持たせておくだけでよくて、わずか数行の書き換えで実現できてしまった。 継続に対応するコードの例 参考ま
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く