3

我遇到了 BSL 的问题。我想将我的代码分成单独的辅助文件并使用

(require "auxiliary-function.rkt") 

在开始时将分离的代码导入定义区域。然而它并没有按预期工作。虽然没有给出明确的错误,但似乎 DrRacket 根本看不到单独文件中的代码,我看到的只是错误

<auxiliary-function-name>: this function is not defined 

显然,

(provide x)

不包含在 BSL 中。我已经阅读了手册这个答案,但仍然不清楚如何进行这项工作。这在 BSL 中甚至可能吗?

谢谢!

4

2 回答 2

4

请注意,如果您为课程执行此操作,则提交时可能不会接受此策略。

我为自己的一些项目所做的是这样的模式:

有一个用普通 Racket 编写的文件,名为"provide.rkt",如下所示:

; provide.rkt
#lang racket
(provide provide all-defined-out)

然后,您可以使用它来提供特定功能或提供文件中的所有定义。

用于提供特定功能

在您的“库”BSL 文件中,您可以像这样要求提供它,并使用它来提供您想要的特定功能:

; <auxiliary-library>.rkt
; written in BSL
(require "provide.rkt")

(provide <auxiliary-function-name>)

(define (<auxiliary-function-name> ....) ....)

最后,在您的“主”BSL 文件中,您可以像这样要求库:

; written in BSL
(require "<auxiliary-library>.rkt")

(<auxiliary-function-name> ....)

用于提供文件中的所有定义

在您的“库”BSL 文件中,您可以要求提供它并使用它来提供所有内容:

; <auxiliary-library>.rkt
; written in BSL
(require "provide.rkt")

(provide (all-defined-out))

(define (<auxiliary-function-name-1> ....) ....)

(define (<auxiliary-function-name-2> ....) ....)

...

然后在您的“主”BSL 文件中,您可以要求该库并获取所有定义:

; written in BSL
(require "<auxiliary-library>.rkt")

(<auxiliary-function-name-1> ....)

(<auxiliary-function-name-2> ....)

...
于 2018-10-04T19:36:28.620 回答
1

BSL 不适合您。如果您知道如何管理模块,我建议您使用成熟的 Racket。

如果你想创建辅助库,我建议你在完整的 Racket 中开发它们,提供你需要的标识符,使用 htdp/error 来制定错误消息,然后“require”就可以工作了。

于 2018-10-04T19:18:15.553 回答