BSL(如何设计程序):如何将代码从单独的文件导入到定义区域?

dek*_*oss 3 racket racket-student-languages

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

\n\n
(require "auxiliary-function.rkt") \n
Run Code Online (Sandbox Code Playgroud)\n\n

首先将分离的代码导入到定义区域。然而它并没有像想象的那样工作。虽然没有给出明确的错误,但似乎 DrRacket 根本看不到单独文件中的代码,而我看到的只是错误

\n\n
<auxiliary-function-name>: this function is not defined \n
Run Code Online (Sandbox Code Playgroud)\n\n

显然,

\n\n
(provide x)\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n

谢谢!

\n

Ale*_*uth 5

请注意,如果您在一门课程中执行此操作,则该策略可能不会被接受提交。

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

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

; provide.rkt
#lang racket
(provide provide all-defined-out)
Run Code Online (Sandbox Code Playgroud)

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

用于提供特定功能

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

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

(provide <auxiliary-function-name>)

(define (<auxiliary-function-name> ....) ....)
Run Code Online (Sandbox Code Playgroud)

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

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

(<auxiliary-function-name> ....)
Run Code Online (Sandbox Code Playgroud)

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

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

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

(provide (all-defined-out))

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

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

...
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

...
Run Code Online (Sandbox Code Playgroud)