Advertisement · 728 × 90

Posts by

[Gauche] kaki: それぞれのbeginがそれぞれのマクロ展開によって挿入されるなら衝突しないからヨシ!ってことなんだと想像します。

1 week ago 0 0 0 0

[Gauche] kaki: ML読んでたら、この挙動の説明と共に
https://srfi-email.schemers.org/srfi-147/msg/4958409/
> The reasons for these rules are:
> 1) This SRFI should be implementable in R7RS-small.
> 2) The rules should be as intuitive as possible.
> 3) Sophisticated custom macro transformers (as the one i ...

1 week ago 0 0 0 0

[Gauche] kaki: 私もそういう理解です>他のclauseも入る

1 week ago 0 0 0 0

[Gauche] leque: ;; こういう理解
(let-syntax ((x (begin
(define x1 42)
...
(syntax-rules ())))
(y (begin
(define y1 42)
...
(syntax-rules ()))))
#f)
===
(let ()
...

1 week ago 0 0 0 0

[Gauche] leque: ところで、beginのdefinitionはlet-syntaxのbodyどころか他のclauseもスコープ入るように見えてそれでいいの感も

1 week ago 0 0 0 0

[Gauche] leque: "mutatis mutandis to all other natively provided binding facilities for keywords, e.g. let-syntax/splicing or define-syntax-parameter. " https://srfi.schemers.org/srfi-147/srfi-147.html

1 week ago 0 0 0 0

[Gauche] leque: SRFI-147のreference implementationとしてはlet-syntaxはR7RSのsemanticsが念頭にあって、R6RSのsplicingなlet-syntax 等々は必要に応じてサポートしてねという感じっぽいですね

1 week ago 0 0 0 0
Advertisement

[Gauche] shiro: あと、let-syntaxをletで囲っちゃうのはR6RSのlet-syntax splicingと互換性なさそうと思うんだけど。

1 week ago 0 0 0 0

[Gauche] kaki: えぇ…let-syntax のbodyがスコープに入っちゃうんですね(キモくないか?)。(begin ...) がよそからrenameされてくるなら実際上は見えないから問題にならないとはいえ。確かにそこのtransformer specからしか見えないとは書いてない。

1 week ago 0 0 0 0

[Gauche] shiro: なるほどぅ。ふーむ、reference implementation動かしてみるか

2 weeks ago 0 0 0 0

[Gauche] leque: let-syntaxの展開結果は(let () ...)に囲まれるので、上のdefineはグローバルにならないよう: github.com/scheme-requests-for-impl...

2 weeks ago 0 0 0 0

[Gauche] leque: beginの展開箇所: github.com/scheme-requests-for-impl...

2 weeks ago 0 0 0 0

[Gauche] leque: (let-syntax ((dummy (begin
(define x 42)
(syntax-rules ()))))
#f)
===
(let ()
(define x 42)
(let-syntax ((dummy (syntax-rules ())))
#f))

2 weeks ago 0 0 0 0

[Gauche] leque: なのでこんな感じ'

2 weeks ago 0 0 0 0
Advertisement

[Gauche] leque: 実装を見た感じ、SRFI-147の begin のdefinitionはlet-syntaxの外側に展開されるみたいですね

2 weeks ago 0 0 0 0

[Gauche] shiro: マクロ展開の度じゃなくてマクロ定義の度、だな。

2 weeks ago 0 0 0 0

[Gauche] shiro: srfi-147のその部分、私も不明確なんだけど、普通のクロージャみたいに環境を作ってもそれが作られるのがマクロ展開時で、通常のクロージャとフェーズが違うからうまくないんですよね。結局、beginを含むマクロ展開の度にグローバル環境に衝突しない名前を作ってくしかないなと思ったんだけど。

2 weeks ago 0 0 0 0

[Gauche] shiro: あれ、renameされるから大丈夫と思ってたんだけどrenameされてないな

2 weeks ago 0 0 0 0

[Gauche] kaki: https://srfi.schemers.org/srfi-147/srfi-147.html

2 weeks ago 0 0 0 0

[Gauche] kaki: SRFI-147の begin のdefinitionってどう評価されてどう束縛を作るかってどこに書いてあるんでしょうか。

2 weeks ago 0 0 0 0

[Gauche] kaki: ;; こんなのも
(define-syntax def
(syntax-rules ()
(_ (define foo 1))))

(let ()
(def)
(let-syntax ((dummy (begin
;; コメントを外すと動く
;; (define x #f)
(def)
(syntax-rules ...

2 weeks ago 0 0 0 0

[Gauche] kaki: gosh> (let-syntax ((dummy (begin
(define x 42)
(syntax-rules ()))))
#f)
#f
gosh> x
42

2 weeks ago 0 0 0 0

[Gauche] kaki: あれ、SRFI-147の第四の begin って定義グローバルに見えちゃっていいんですかね?

2 weeks ago 0 0 0 0

[Gauche] kaki: ので (let-syntax ((bar foo)) ...) みたいなのはmacroをコピーしちゃうのがいいかなと思ってたんですが、begin や define みたいな特殊な特殊形式はコピーしてちゃんと動くのかなと書いてて思ったり。

2 weeks ago 0 0 0 0
Advertisement

[Gauche] kaki: SRFI-262のユーザ定義パターン構文を実装するのにSRFI-213 Identifier Propertyっぽいものが必要で、それは束縛に対応するオブジェクトが取れるとできそうなので、env-lookup-intが異なる束縛に異なるオブジェクトを返してくれるとできそうな気がしてるんですよね。

2 weeks ago 0 0 0 0

[Gauche] kaki: ;; あとinternal error出ました
(letrec-syntax ((foo (syntax-rules ()))
(bar foo))
42)
*** ERROR: [internal] cenv-lookup returned weird obj: (syntax-rules ())
While compiling: foo
While compiling: (letrec-syntax ((foo (syntax-rules ())) (bar foo)) 42)

2 weeks ago 0 0 0 0

[Gauche] kaki: ;; env-lookup-int が異なる変数に同一のmacro(やsyntax?)を返すケースが出てきたため、free-identifier=? が #t になってしまいます
(let-syntax ((foo (syntax-rules ())))
(let-syntax ((bar foo))
(let-syntax ((f (er-macro-transformer
(^ (form rename id=?)
(id=? 'fo ...

2 weeks ago 0 0 0 0

[Gauche] shiro: ケースの見落としでした。fixed

2 weeks ago 0 0 0 0

[Gauche] shiro: https://github.com/shirok/Gauche/issues/1249

2 weeks ago 0 0 0 0

[Gauche] shiro: バグですね

2 weeks ago 0 0 0 0