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

时间:2018-10-04 19:07:37

标签: racket racket-student-languages

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

(require "auxiliary-function.rkt") 

首先将分隔的代码导入定义区域。但是,它没有按预期工作。尽管没有给出明确的错误,但看来DrRacket根本看不到单独文件中的代码,而我所看到的只是错误

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

显然,

(provide x)

不包含在BSL中。我已经阅读了manualthis的答案,但仍不清楚如何实现此目的。在BSL中甚至有可能吗?

谢谢!

2 个答案:

答案 0 :(得分:1)

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

如果要创建辅助库,建议您在完整的Racket中进行开发,提供所需的标识符,使用htdp / error编写错误消息,然后'require'将起作用。

答案 1 :(得分:1)

请注意,如果您正在为某门课程进行此操作,则此策略可能不会被接受。

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

具有一个用普通球拍编写的文件,名为"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> ....)

...