I would like to include all the functions defined in a given racket file so that I get the same effect as if they were copied. Is it possible to do that?
Including an external file in racket
You can use include
as follows:
Create a file called "foo.rkt"
that looks like this:
(define x 1)
(define y 2)
Then in another file:
#lang racket
(require racket/include)
(include "foo.rkt")
(+ x y)
You should see the result 3
.
You can see the documentation for include
as well.
Sam, please read Racket language questions tagging: tags "plt-scheme" and "racket". –
Synergistic
Sorry to awaken an old thread, but why is there no #lang racket in foo.rkt? –
Towhee
@Manbroski there is no
#lang
because foo.rkt
isn't a module, it's just some definitions. #lang
creates a module. If we did that, we'd be trying to include a module inside our module, which isn't what we want. –
Historied How can I do it while having
#lang
in foo.rkt
? –
Fibroblast To export the functions out of a module, you use provide
, consider a file "foo.rkt"
:
#lang racket
(define fortytwo 42)
(define (det a b c)
(- (* b b) (* 4 a c)))
(provide (fortytwo det))
The file "bar.rkt"
now can import definitions from "foo.rkt"
:
#lang racket
(require "foo.rkt")
(define (baz a b c)
(+ (det a b c) (- c 4)))
The other way you could allow other files to have access to everything that’s defined in the file, is using (all-defined-out)
:
#lang racket
(define fortytwo 42)
(define (det a b c)
(- (* b b) (* 4 a c)))
(provide (all-defined-out))
Hope that helps.
Note also that there is
include
, which might be what the question was originally about. –
Braid somehow include didn't work in my case, but your solution did the job. –
Sherronsherry
I believe the right syntax to export those two functions fortytwo and det is
(provide fortytwo det)
. –
Dollarbird You can use include
as follows:
Create a file called "foo.rkt"
that looks like this:
(define x 1)
(define y 2)
Then in another file:
#lang racket
(require racket/include)
(include "foo.rkt")
(+ x y)
You should see the result 3
.
You can see the documentation for include
as well.
Sam, please read Racket language questions tagging: tags "plt-scheme" and "racket". –
Synergistic
Sorry to awaken an old thread, but why is there no #lang racket in foo.rkt? –
Towhee
@Manbroski there is no
#lang
because foo.rkt
isn't a module, it's just some definitions. #lang
creates a module. If we did that, we'd be trying to include a module inside our module, which isn't what we want. –
Historied How can I do it while having
#lang
in foo.rkt
? –
Fibroblast © 2022 - 2024 — McMap. All rights reserved.