BSL(如何设计程序):如何将代码从单独的文件导入到定义区域?
BSL (How to Design Programs): how to import code from a separate file into definitions area?
我对 BSL 有疑问。我想将我的代码分成单独的辅助文件并使用
(require "auxiliary-function.rkt")
开头将分离出来的代码导入定义区。然而,它并不像预期的那样工作。虽然没有给出明确的错误,但似乎 DrRacket 根本看不到单独文件中的代码,我看到的只是错误
<auxiliary-function-name>: this function is not defined
显然,
(provide x)
不包含在 BSL 中。我已阅读 manual and 答案,但仍不清楚如何进行这项工作。这在 BSL 中甚至可能吗?
谢谢!
BSL 不适合你。如果你知道如何管理模块,我建议你使用成熟的 Racket。
如果你想创建辅助库,我建议你在完整的Racket中开发它们,提供你需要的标识符,使用htdp/error来制定错误信息,然后'require'就可以了。
请注意,如果您为课程执行此操作,则此策略可能不会被接受。
我自己做的一些项目是这样的模式:
有一个用纯 Racket 编写的文件,名为 "provide.rkt"
,如下所示:
; provide.rkt
#lang racket
(provide provide all-defined-out)
然后您可以使用它来提供特定功能或提供文件中的所有定义。
用于提供特定功能
在您的 "library" BSL 文件中,您可以像这样要求提供给它,并使用它来提供您想要的特定功能:
; <auxiliary-library>.rkt
; written in BSL
(require "provide.rkt")
(provide <auxiliary-function-name>)
(define (<auxiliary-function-name> ....) ....)
最后,在您的 "main" BSL 文件中,您可以像这样要求库:
; written in BSL
(require "<auxiliary-library>.rkt")
(<auxiliary-function-name> ....)
用于提供文件中的所有定义
在您的 "library" BSL 文件中,您可以要求向其中提供并使用它来提供所有内容:
; <auxiliary-library>.rkt
; written in BSL
(require "provide.rkt")
(provide (all-defined-out))
(define (<auxiliary-function-name-1> ....) ....)
(define (<auxiliary-function-name-2> ....) ....)
...
然后在您的 "main" BSL 文件中,您可以要求库并获取所有定义:
; written in BSL
(require "<auxiliary-library>.rkt")
(<auxiliary-function-name-1> ....)
(<auxiliary-function-name-2> ....)
...
我对 BSL 有疑问。我想将我的代码分成单独的辅助文件并使用
(require "auxiliary-function.rkt")
开头将分离出来的代码导入定义区。然而,它并不像预期的那样工作。虽然没有给出明确的错误,但似乎 DrRacket 根本看不到单独文件中的代码,我看到的只是错误
<auxiliary-function-name>: this function is not defined
显然,
(provide x)
不包含在 BSL 中。我已阅读 manual and
谢谢!
BSL 不适合你。如果你知道如何管理模块,我建议你使用成熟的 Racket。
如果你想创建辅助库,我建议你在完整的Racket中开发它们,提供你需要的标识符,使用htdp/error来制定错误信息,然后'require'就可以了。
请注意,如果您为课程执行此操作,则此策略可能不会被接受。
我自己做的一些项目是这样的模式:
有一个用纯 Racket 编写的文件,名为 "provide.rkt"
,如下所示:
; provide.rkt
#lang racket
(provide provide all-defined-out)
然后您可以使用它来提供特定功能或提供文件中的所有定义。
用于提供特定功能
在您的 "library" BSL 文件中,您可以像这样要求提供给它,并使用它来提供您想要的特定功能:
; <auxiliary-library>.rkt
; written in BSL
(require "provide.rkt")
(provide <auxiliary-function-name>)
(define (<auxiliary-function-name> ....) ....)
最后,在您的 "main" BSL 文件中,您可以像这样要求库:
; written in BSL
(require "<auxiliary-library>.rkt")
(<auxiliary-function-name> ....)
用于提供文件中的所有定义
在您的 "library" BSL 文件中,您可以要求向其中提供并使用它来提供所有内容:
; <auxiliary-library>.rkt
; written in BSL
(require "provide.rkt")
(provide (all-defined-out))
(define (<auxiliary-function-name-1> ....) ....)
(define (<auxiliary-function-name-2> ....) ....)
...
然后在您的 "main" BSL 文件中,您可以要求库并获取所有定义:
; written in BSL
(require "<auxiliary-library>.rkt")
(<auxiliary-function-name-1> ....)
(<auxiliary-function-name-2> ....)
...