2010/05/25

syntax-rules: update-if-true!

プログラミングGauche って、マクロの章すごく少ないですよね・・・。syntax-rules の練習問題というか例題というか、そういうのをたくさん見たい。ソース読め?



追記

コメント欄より。
cond-set!の2番目の節はおそらくやりたいことと違うのではないかと推察します。
init2だけが複数扱いになり、var2が繰り返されます。
(cond-set! a b c d e f g)

(if a (begin (set! b c) (set! d e) (set! d f) (set! d g)))
になります。(2番目以降、set!されてるのはすべてd)
修正してみました。

プログラミングGauche


2 件のコメント:

  1. cond-set!の2番目の節はおそらくやりたいことと違うのではないかと推察します。
    init2だけが複数扱いになり、var2が繰り返されます。
    (cond-set! a b c d e f g)

    (if a (begin (set! b c) (set! d e) (set! d f) (set! d g)))
    になります。(2番目以降、set!されてるのはすべてd)

    マクロはちゃんと書こうとするとそれだけで大変になりそうだったので、『プログラミングGauche』では深入りを避けました。Schemeマクロのとってもディープな話はOleg Kiselyovさんのページ http://okmij.org/ftp/Scheme/macros.html をどうぞ。(注: 同ページにあるマクロはsyntax-rulesを限界まで酷使するんですが、Gaucheの実装は弱っちいので破綻します; 具体的にはマクロを定義するマクロでうまくいかないところが出ます)

    返信削除
  2. 試してみたところ、仰る通りの結果でした。修正してみます!

    >マクロはちゃんと書こうとするとそれだけで大変になりそうだったので、『プログラミングGauche』では深入りを避けました。
    そうだったんですか。確かにマクロまで詳細に書かれていたら、本の厚みがすごいことになりそうですね。。

    Oleg Kiselyovさんって、The Reasoned SchemerとかSXMLの方ですよね?教えて頂いたページを読んでみます!ありがとうございます!

    返信削除