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!
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.
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> ....)
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> ....)
...