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?

YasirA
  • 9,531
  • 2
  • 40
  • 61
D R
  • 21,936
  • 38
  • 112
  • 149

3 Answers3

26

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.

Eli Barzilay
  • 29,301
  • 3
  • 67
  • 110
YasirA
  • 9,531
  • 2
  • 40
  • 61
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.

Sam Tobin-Hochstadt
  • 4,983
  • 1
  • 21
  • 43
  • Sam, please read [Racket language questions tagging: tags "plt-scheme" and "racket"](http://meta.stackexchange.com/q/74042/147036). – YasirA Feb 08 '11 at 19:08
  • 1
    Sorry to awaken an old thread, but why is there no #lang racket in foo.rkt? – ivan-k Aug 28 '14 at 05:56
  • 6
    @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. – Sam Tobin-Hochstadt Sep 03 '14 at 22:27
1

You could use load

(load "assert.scm")
Hawk
  • 1,513
  • 1
  • 14
  • 17