いわゆる「現在の環境」を次のように分解できます。
(define (get-current-binding-list)
(let* ((e (current-module)) ;; assume checking current-module
(h (struct-ref e 0)) ;; index 0 is current vars hashtable
)
(hash-map->list cons h) ;; return a vars binding list
))
(get-current-binding-list) を呼び出して、current-module の変数バインディング リストを取得できます。このリストの各要素は、たとえば (symbol-name . variable-type) のように、シンボルと変数の型のペアであることに注意してください。したがって、次のように出力できます。インスタンスの場合、var バインディングが得られます。
(define abc 5)
それから:
(let ((vl (get-current-binding-list)))
(assoc-ref vl 'abc)
)
==>#<variable 9bb5108 value: 5>
この結果は変数「abc」の「変数型」です。variable-ref プロシージャでその値を取得できます。
したがって、すべてのバインディングをトレースして何かを行うことができます。コードでは、var-name と var-value を出力するだけです。
私の答えが簡潔すぎることは承知していますが、マニュアルで詳細を見つけるのに役立つ十分な情報があると思います。これがあなたを助けることを願っています。