ローカル変数の一覧を取得
Posted feedbacks - Scheme
これはキツイ… Gaucheでは最適化によって、定数で初期化されて一度も 変更されないローカル変数とかは実行時には消えてしまいますし、 逆にマクロ展開によってプログラム上には無いローカル変数が 挿入される場合もあります。 やるとしたらマクロで処理系そのものを置き換えるしか なさそうです。ここではletだけ再定義していますが、 ちゃんと動かすにはdefine, lambda, let*, letrec, あたりの束縛系を全部再定義しないと…
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | (use util.match)
(define-macro (let binds . body)
(match binds
[((var init) ...)
`((lambda (local-vars) (apply (lambda ,var ,@body) (map cdr local-vars)))
(list ,@(map (lambda (v i) `(cons ',v ,i)) var init)))]))
;;;
(define (foo)
(let ((x 1)
(y "hello"))
local-vars))
;; => ((x . 1) (y . "hello"))
|


にしお
#3391()
Rating0/0=0.00
Pythonで表現すると、下のコードの???部分を埋めることになります。
>>> def foo(): x = 1 y = "hello" ??? return result >>> foo() {'y': 'hello', 'x': 1}[ reply ]