BSL (How to Design Programs): how to import code f

2020-04-17 04:45发布

I'm having an issue with BSL. I want to divide my code into separate auxiliary files and use

(require "auxiliary-function.rkt") 

at the beginning to import the separated code into the definitions area. However it doesn't work as supposed. Though no explicit error given, it seems like that that DrRacket simply doesn't see the code in the separate file and all I see is the error

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

Apparently,

(provide x)

is not included in BSL. I've read the manual and this answer but it’s still not clear how to make this work. Is this even possible in BSL?

Thanks!

2条回答
祖国的老花朵
2楼-- · 2020-04-17 05:04

BSL is not for you. If you know how to manage modules, I recommend you use full-fledged Racket.

If you wish to create auxiliary libraries, I recommend you develop them in full Racket, provide the identifiers you need, use htdp/error to formulate error messages, and 'require' will then work.

查看更多
来,给爷笑一个
3楼-- · 2020-04-17 05:19

Note that if you're doing this for a course this strategy might not be accepted for a submission.

What I have done for some of my own projects is a pattern like this:

Have one file written in plain Racket, called "provide.rkt", like this:

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

Then you can use this to either provide specific functions or provide all definitions from a file.

For providing specific functions

In your "library" BSL file, you can require provide into it like this, and use that to provide the specific function(s) you want:

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

(provide <auxiliary-function-name>)

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

And finally, in your "main" BSL file, you can require the library like this:

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

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

For providing all definitions from a file

In your "library" BSL file, you can require provide into it and use that to provide everything:

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

(provide (all-defined-out))

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

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

...

Then in your "main" BSL file, you can require the library and get all of the definitions:

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

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

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

...
查看更多
登录 后发表回答