3

我一直在使用以下语言定义文件eopl-printing.rkt

#lang 球拍
    (require (except-in eopl #%module-begin))
    (提供(全从外的 eopl))
    (提供#%module-begin)
正如DrRacket EOPL 方案输出中所建议的那样。一切进展顺利,除非我尝试调用 exn 函数,如下所示:

#lang s-exp“eopl-printing.rkt”
(需要机架单元)
(检查-exn
   exn:失败?
   (拉姆达()
     (错误'嗨“那里”)))

我没有按预期成功通过测试,而是收到“exn:fail?: unbound identifier ...”消息。我已经阅读了有关模块的文档并尝试了各种方法来尝试重新公开 Racket exn 定义,但没有任何运气。有什么建议么?

4

1 回答 1

4

eopl-printing.rkt文件定义了一种语言,该语言仅包含eopl库中的绑定以及#%module-beginfromracket但不包含其他内容。

但是您仍然可以轻松地在用该语言racket编写的任何文件中导入绑定:eopl-printing.rkt

#lang s-exp "eopl-printing.rkt"
(require rackunit)
(require racket)
(check-exn
   exn:fail?
   (lambda ()
     (error 'hi "there")))

或者,您可以让您的eopl-printing.rkt语言提供racket您想要的其他表格:

#lang racket
(require (except-in eopl #%module-begin))
(provide (all-from-out eopl))
(provide #%module-begin exn:fail? error)

或者只是重新提供所有内容racket

#lang racket
(require (except-in eopl #%module-begin))
(provide (all-from-out eopl))
(provide (all-from-out racket))
于 2013-06-24T20:53:04.633 回答