1

我正在尝试在 Racket 中执行以下 R5RS 代码:

#lang r5rs
(define boo 100)
(define lib `(begin 88 99 99 ,boo))
(eval lib (interaction-environment))

但是,这会导致错误:

begin: unbound identifier;
also, no #%app syntax transformer is bound
at: begin
in: (begin 88 99 99 100)

在普通球拍中,我可以使用命名空间锚来解决这个问题,如下所示:

#lang racket
(define-namespace-anchor a)
(define ns (namespace-anchor->namespace a))
(define boo 100)
(define lib `(begin 88 99 99 ,boo))
(eval lib ns)

但由于 R5RS 没有 定义命名空间锚点,我无法以这种方式解决它。如何修改 R5RS 环境以使原始代码正常工作?

4

1 回答 1

0

最好将此作为错误提交——但解决该错误的方法是使函数抛出错误,因为该函数应该为您提供用户与之交互的环境,而这里没有交互。

(而且我不知道你想做什么,但我认为你应该用它(scheme-report-environment 5)来构成一个环境。)

于 2013-04-28T23:18:52.853 回答