<div dir="ltr"><div><div><div><div>There are several ways to do that.<br><br></div>As Matthias, I often use a file called "base.rkt" where I put all the constants that can be used in different files.<br></div><div>

For non-constants, I use either a parameter or simply a getter procedure.<br></div><div>You can even place there some procedures to be defined later (kind of like with a .h C file) in case module A requires module B that requires function f, but you want to define f in A, for whatever reason. Then you can write `(define f #f) (provide f)' in base.rkt and `(set! f (lambda ....)' in A.rkt. It's not pretty though.<br>

</div><div>If required several times, a module will be instantiated only once (you could tried this out yourself ;) ).<br></div><div>Also, if the student module needs to be required in several files and you don't want to change the student file name in all modules, you can write a require/provide wrapper D.rkt, where you write<br>

</div><div>(require "student1.rkt")<br></div><div>(provide (all-from-out "student1.rkt"))<br></div><div>and then require only D.rkt. Switching from one student file to the other then only needs to be done only in D.rkt.<br>

</div><div><br>I think you can also use units, but I've never really tried them myself.<br><br></div>You can also use a struct or a singleton object where to put all your globals, and pass that object to all students functions.<br>

</div><br>You can also make the student code inherit from a class that already has access to all these globals.<br><br></div><div>I'd be interested in the end result :)<br><br>Laurent<br></div></div><div class="gmail_extra">

<br><br><div class="gmail_quote">On Mon, Nov 4, 2013 at 12:49 AM, Matthias Felleisen <span dir="ltr"><<a href="mailto:matthias@ccs.neu.edu" target="_blank">matthias@ccs.neu.edu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<br>
I tend to define such constants in a file dubbed 'basics' and require it everywhere. See<br>
<br>
 <a href="https://github.com/mfelleisen/Acquire" target="_blank">https://github.com/mfelleisen/Acquire</a><br>
<br>
for example. There 'basics' contains the constants I need for most of the game implementation and some simple functions too.<br>
<br>
-- Matthias<br>
<div><div class="h5"><br>
<br>
<br>
<br>
<br>
<br>
On Nov 3, 2013, at 12:45 PM, Stephen Bloch wrote:<br>
<br>
> Program P uses several functions (say, f and g) which can be implemented in several different ways (think of (f,g) as a Java interface, with (f1,g1) as one implementing class, (f2,g2) as another implementing class, etc.)  I'd like to be able to run the program with one implementation, then with minimal effort run it again with a different implementation.<br>


><br>
> The f and g functions, naturally, take some information from P.  But some of the information they need really is changeable from one call to the next (make it parameters to f and g), while other information is read from a data file on each invocation of P, and won't change for the duration of that run of P, so it feels more natural to store that information in a global constant C.<br>


><br>
> If I were putting implementations of f & g in the same source file with P, I would just define C in that source file, and implementations of f & g could refer to it by name.  But putting the implementations of f & g into the main source file makes it a pain to plug in a different implementation.  If C were simple to define, I would provide it from another source file that all these other files require… but C is defined by parsing a data file; is that going to happen once for each source file that requires it?<br>


><br>
> What's an "approved" way to structure this sort of thing?  Is this a job for parameterize?<br>
><br>
> (In case you're curious about the application, it's an animated visualization of a graph-coloring problem, and I want to have students plug in their own algorithms for graph-coloring.  C is the adjacency relation, the list of available colors, a couple of things like that.  My students have never heard of parameterize, but that's the least of my worries right now.)<br>


><br>
><br>
> Stephen Bloch<br>
> <a href="mailto:sbloch@adelphi.edu">sbloch@adelphi.edu</a><br>
> GPG key at <a href="http://home.adelphi.edu/sbloch/sbloch.pubkey.asc" target="_blank">http://home.adelphi.edu/sbloch/sbloch.pubkey.asc</a><br>
><br>
</div></div>> ____________________<br>
>  Racket Users list:<br>
>  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
<br>
<br>
____________________<br>
  Racket Users list:<br>
  <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
</blockquote></div><br></div>