Including an external file in racket
Asked Answered
C

3

19

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?

Conny answered 26/1, 2011 at 20:5 Comment(0)
H
18

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.

Historied answered 8/2, 2011 at 19:1 Comment(4)
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
S
27

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.

Synergistic answered 27/1, 2011 at 1:3 Comment(3)
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
H
18

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.

Historied answered 8/2, 2011 at 19:1 Comment(4)
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
M
1

You could use load

(load "assert.scm")
Matador answered 19/2, 2018 at 14:42 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.