2010/05/27

Re: syntax-rules: reverse-and-quote-list

letrec-syntax が、なかなか思ったように動かない(書き方がわからない)という状態でした。
補助マクロやローカルマクロが思ったように動かないなら、パターンを追加すれば良いのかも?

(define-syntax reverse-and-quote-list
(syntax-rules ()
((_ lis)
(reverse-and-quote-list lis ()))
((_ () (backw ...))
'(backw ...))
((_ (arg rest ...)(backw ...))
(reverse-and-quote-list (rest ...)(arg backw ...)))))
(reverse-and-quote-list (1 2 3 4 5))
; -> (5 4 3 2 1)

ということで、今回の場合はこれで動いたようです。
なんかメソッドのオーバーロード(C#とか)に似ていませんか。



shiro さんにコメントを頂き、教えて頂きました。ありがとうございます!
こうやって処理系の作者の方から直接コメントを頂けるなんて、すごい世界ですね、インターネッツは・・・。
define-syntaxの直下にletrec-syntaxが来る形はGaucheではまだサポートされていません。
「展開した結果に...を含める」には (... ...) と書くことにR6RSではなっています。Gaucheでは未サポートです。
R5RS をまともに読んだことがない、というのがよくないですね・・・orz R6RS についてはほとんど何もしりません。。R5RS に比べてページ数が3倍の150ページになったらしいことと、defmacro でできることができるらしい syntax-case なる難しそうなものがある、ということくらいしか知りません。

追記

補助マクロやローカルマクロが思ったように動かないなら、パターンを追加すれば良いのかも?
でも、余計なインターフェース(?)が増えるのか・・・。うーん。

プログラミングGaucheThe Reasoned Schemer

0 件のコメント:

コメントを投稿