トップ «前の日記(2007-12-02) 最新 次の日記(2007-12-06)» 編集

Route 477



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はなんか動いてるのはわかるけどよくわからん。