【问题标题】:Racket R5RS "no #%app syntax transformer is bound"Racket R5RS“没有绑定 #%app 语法转换器”
【发布时间】:2013-04-22 10:16:11
【问题描述】:

我正在尝试在 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 没有 define-namespace-anchor 我无法通过这种方式解决它。 如何修改 R5RS 环境,让原代码正常运行?

【问题讨论】:

    标签: namespaces eval racket r5rs


    【解决方案1】:

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

    (而且我不知道您要做什么,但我认为您应该使用(scheme-report-environment 5) 来构建环境。)

    【讨论】:

    • 好吧,我正在尝试在球拍中运行 SRFI 72 参考实现 (het.brown.edu/people/andre/macros/index.htm),但程序在使用 (eval variable (interaction-environment)) 时中断了 i> 哪个应该在标准 r5rs 实现中工作?
    • (1) 如果您尝试运行它,那么最好从特定于 Racket 的代码开始(在以前的名称“mzscheme”下); (2) 我不知道这个实现,但我注意到在 cmets 中有一条注释说:“所有运行时使用的 eval [...] 已被删除。”; (3) 这是一个实现低级宏系统的库 (syntax-case)——我怀疑这在 R5RS 中是可能的,至少不是这个库实现它的方式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-13
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-16
    相关资源
    最近更新 更多