Kahua
Schemeによる継続ベースのWebフレームワーク
吉田 裕美 --- EY-Office
http://d.hatena.ne.jp/yuum3/
Kahuaとは?
- 読み:かふあ
- ハワイ語
- 意味:
- 基盤、基礎、土台、広場(集会場)
- 何かを産み出す母体
Kahuaの要素
- Gauche (Scheme)
- 継続
- S式
- REPL
- OO-DB
Scheme
- Lispの方言の1つ
- Common Lispと並ぶシェア
- シンプルな基本機能
- しかし、強力
Gauche
- Scheme実装の一つ
- 川合史朗氏(ハワイ在住)が開発
- 高速なインタプリター
- 充実のライブラリー
- 。。。
S式
- Tree構造を表す
- Lispのデータ構造
- LispではプログラムもS式
- ((((括)(弧))(が)((いっぱ)い)) "(^^;")
- でも、括弧はemacsが面倒みてくれるので恐れる事はない!
- S式はLispパワーの源泉
REPL
- 対話インターフェース
- 実行中のサーバーにコネクト
- システムをダイナミックに変更
OO-DB
- Gaucheのオブジェクトを永続化
- CLOS風のオブジェクトシステム
- クラスはスロット(メンバー変数)を定義
- 操作は、ジェネリック関数
- RDBにも格納できる
- デフォルトはファイルに格納
Gaucheのオブジェクトシステム
;; Class定義
(define-class <2d-point> () (x y))
;; インスタンスの作成
(define a-point (make <2d-point>))
;; method定義
(define-method move-by! ((pt <2d-point>) dx dy)
(inc! (x-of pt) dx)
(inc! (y-of pt) dy))
注) <> は単なるシンボル名の一部で特別な記号ではありません
継続 Continuation
継続の定義
- 継続の正確な定義
- Schemeの式が評価される時、そこには評価の結果を待つ継続が一つ待機している。継続は計算の(デフォルトの)未来全体を表している。
- ( ̄ω ̄;)う〜ん…
- なんでも継続 by川合氏
継続のサンプル
(define *save* ())
(define fact
(lambda (x)
(if (= x 1)
(call/cc
(lambda (cc)
(set! *save* cc)
1))
(* x (fact (- x 1))))))
;
(fact 3) => 6
; ここで、*save*の値は (lambda(a) (* 3 (* 2 a)))
(*save* 1) => 6
(*save* 2) => 12
Kafuaサンプルコード
emacsで見てみましょう。
継続はSchemeだけのものではない
- Perl, Python, Ruby, Javascript ...
- → クロージャを持つ全ての言語
- そして、Java SE 7
- Powered by (λ)