2007-12-04
■ [event][scheme] 生駒読書会#1
日曜日に生駒に行ってきましたよ。てか関東からも人が来るとかwww生駒すげえwww *1
Scheme使いとSchemeビギナーが半々だったので、3章からやると意味不明になるかな…と思って 2章の最後から始めることを提案したんですが、別に良かったのかなぁ。
3impのために初めて書いたマクロのコードをここに置いときますね。
;; (record (a b c) ls (+ a b c))
(define-macro (record vars val . exps)
`(apply (lambda ,vars ,@exps) ,val))
;; (record-case exp1
;; [key vars exp2..]
;; ...
;; [else exp3..]
(define-syntax record-case
(syntax-rules (else)
((record-case exp1 [else exp3 exp4 ...]) ; for else
(begin exp3 exp4 ...))
((record-case exp1 [key vars exp2 ...]) ; only one case
(record vars (cdr exp1) exp2 ...))
((record-case exp1 [key vars exp2 ...] case2 ...) ; more than one case
(let ([r exp1])
(if (eq? (car r) (quote key))
(record vars (cdr r) exp2 ...)
(record-case exp1 case2 ...))))))
(define (main args)
(print
(record-case '(hoge 1 2 3)
(hoge (x y z) (+ x y z))
(else #f))))
今日気付いたんですが、Gaucheの場合recordはmatch-let1で代用可能です((use util.match)が必要)。
ともあれ、初主催お疲れ様でした:-)
*1 実家は関西だそうですが
■ [prog] CodeReposのアカウントを頂きました
初コミット。 テストがてらに、この前のRubyでS式を作るやつを上げてみました。
チェックアウトは
svn co http://svn.coderepos.org/share/lang/ruby/misc/sexp
からどうぞ!
■ [event] 2007年度未踏I期 畑PM採択プロジェクト 最終成果報告会
sandbox(仮) と 「子猫の手」 がおもしろかったお! あとafrousはUI(Ajax)の作りこみがやばい。
Objec[t]ankはなんかアカウントがうまく作れなくてよくわからん。 concier.orgはなんか動いてるのはわかるけどよくわからん。
[ツッコミを入れる]