вы можете разложить так называемую «текущую среду» следующим образом:
(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.
Обратите внимание, что каждый элемент в этом списке представляет собой пару символов и тип переменной, скажем, (имя-символа. Тип-переменной). Таким образом, вы можете напечатать это так:
например, вы получили привязку к переменной:
(define abc 5)
тогда:
(let ((vl (get-current-binding-list)))
(assoc-ref vl 'abc)
)
==> #<variable 9bb5108 value: 5>
Этот результат представляет собой «тип переменной» переменной «abc». Вы можете получить его значение с помощью процедуры variable-ref.
Таким образом, вы можете отследить все привязки и сделать что-то в своем коде, просто выведите имя-переменной и значение-переменной.
Я знаю, что мой ответ слишком краткий, но я думаю, что достаточно информации, чтобы помочь вам найти более подробную информацию в руководстве.
Надеюсь, это поможет вам.