Lisp Scheme Part27at TECH
Lisp Scheme Part27 - 暇つぶし2ch351:デフォルトの名無しさん
09/08/11 13:18:50
ちょっとした思いつきなんだが、
(let ((x 1))
(outer-scope
(let ((x 2))
(inner-scope x))))
このときに 1 を返す、つまり inner-scope の内側では outer-scope の外側の束縛を参照
するようなマクロ outer-scope inner-scope を定義してみた。
(define-syntax outer-scope
(lambda(x)
(syntax-case x ()
((k body ...)
(with-syntax
((inner-scope (datum->syntax #'k 'inner-scope))
(k (syntax k)))
#'(let-syntax
((inner-scope
(lambda(x) (syntax-case x ()
((j b (... ...))
#`(begin
#,@(datum->syntax #'k
(syntax->datum #'(b (... ...))))))))))
body ...))))))
未だに datum->syntax の第一引数の意味がよくわからん。
規格には
> (datum->syntax template-id datum)
> template-id はテンプレート識別子であり、datum はデータ値でなければならない。
> この手続きは template-id と同一の文脈情報をもつ datum の構文オブジェクト表現を返す。
> このとき、この構文オブジェクトは template-id が挿入されたのと同時にコードに挿入されたかのようにあつかわれる。
って書いたるんだが、文脈情報って何だ?
自分の中ではスコープだと思って使ってて、だいたい期待する挙動になるみたいなんだが、その理解でいいの?
もうちょっとわかりやすい説明があれば助かる。
拙者は日本人なので英語の文献とか紹介しようとしないで頂ければ助かるでゴザルよ。


次ページ
続きを表示
1を表示
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch