如何检查/导出/序列化(贵族)计划环境

|| 我想在另一个安全流程中导出或复制方案环境。我正在想象的算法会做这样的事情来序列化:
(map (lambda (var val) (display (quasiquote (define ,var ,val))
                       (newline))
     (get-current-environment))
然后在另一端阅读/评估。 但是,尽管有一些函数可以返回当前环境,但它们采用的是一些内部格式,我不能只是
map
。我该如何在上述环境中“行走”?或者,如何将环境复制到另一个进程中?     
已邀请:
您可以像这样分解所谓的“当前环境”:
(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”的“变量类型”。您可以使用变量引用过程获取它的值。 因此,您可以在代码中跟踪所有绑定并执行某些操作,只需打印var-name和var-value。 我知道我的回答太简短了,但是我认为有足够的信息可以帮助您在手册中找到更多详细信息。 希望这会帮助你。     
您无法真正序列化Scheme环境。我什至不知道是否有可能(连续地)序列化延续。哦,别忘了FFI。端口和线程也不能序列化。     

要回复问题请先登录注册