変数がコンパイル時の環境にない場合に、テキストで提案されている (op get-global-environment) の使用方法を知りたいです。グローバル環境を指すように環境を設定する必要があるため、保存コマンドと復元コマンドを追加しましたが、テキストは常に保存を使用してレジスタを保存および復元するため、快適ではありません。これが私のコードです、何かアイデアはありますか?
(define (compile-assignment exp target linkage cmpl-env)
(let ((var (assignment-variable exp))
(get-value-code
(compile (assignment-value exp cmpl-env) 'val 'next))
(laddr (find-variable var cmpl-env)))
(end-with-linkage
linkage
(preserving '(env)
get-value-code
(if (eq? laddr 'not-found)
(make-instruction-sequence
'(env val) (list target)
`((save env) ;;;here;;;;
(assign env (op get-global-environment))
(perform (op set-variable-value!)
(const ,var)
(reg val)
(reg env))
(restore env) ;;;and here ;;;;
(assign ,target (const ok))))
(make-instruction-sequence
'(env val) (list target)
`((perform lexical-address-set! laddr (reg val) (reg env)))
(assign ,target (const ok)))))))))