[racket] Best practices for installing and using R6RS libraries with Racket on Windows

From: Imran Rafique (imran at rafique.org)
Date: Thu Jan 19 17:35:06 EST 2012

I was bitten by the same issue as well. If you just have a directory in
$PLTCOLLECTS, by itself, it becomes the sole collections search path.

If you want to prepend <my_dir> to the collections search path, then you

Notice the trailing ':'

Its covered in the Racket Reference.

       Imran Rafique

On 19 January 2012 13:40, Eduardo Cavazos <wayo.cavazos at gmail.com> wrote:

> Hello,
> I've been testing out my MPL libraries with Racket 5.2 on Windows 7.
> I generally use R6RS implementations and libraries. Thus, I tend to keep
> my library directories in "~/scheme" on Linux or
> "c:\users\myhomedir\scheme" on Windows. MPL has two dependencies (surfage
> and dharmalab; mentioned in the README) that should also be present in the
> library collection.
> So to "install" MPL for Racket on Windows, I simply modified my
> PLTCOLLECTS environment variable. At first I simply defined it as:
>    c:\users\dharmatech\scheme
> However, having only that directory in PLTCOLLECTS caused major problems
> for DrRacket.
> My next step was to check the result of:
>    (get-collects-search-dirs)
> and include those paths in PLTCOLLECTS as well. That seemed to do the
> trick. So my PLTCOLLECTS variable now looks like:
> C:\Users\dharmatech\AppData\**Roaming\Racket\5.2\collects;C:**\Program
> Files (x86)\R
> acket\collects;c:\users\**dharmatech\scheme
> I'd like to provide some basic instructions in the README for getting
> started in a Windows environment with Racket and MPL. Should I suggest that
> the PLTCOLLECTS variable be modified as I've done above?
> Section 6.1.3 of the Racket guide recommends using 'raco link' to install
> collections. Would this somehow be better than the PLTCOLLECTS approach?
> The drawback to this is that it appears that the user would have to 'raco
> link' all three library collections (i.e. surfage, dharmalab, mpl).
> Once installed, MPL appears to function properly. The test suite passes
> when I run:
> c:\Program Files (x86)\Racket>plt-r6rs c:\Users\dharmatech\scheme\**
> mpl\test.sps
> I recently added an '(mpl all)' library which exports commonly used
> procedures and macros. So to get a REPL up an running, in a DrRacket
> definitions window add:
> #!r6rs
> (import (mpl rnrs-sans)
>        (mpl all))
> hit "Run" and the MPL procedures/macros should available in the
> interactions window.
> I normally write my Scheme code as R6RS libraries, not as Racket modules
> and I don't have much experience with the latter. It'd be nice if Racket
> module authors could import MPL libraries into their normal racket modules.
> Of course, MPL exports procedures that conflict naming-wise with
> traditional procedures like +, -, *, /, sin, cos, etc. How should I handle
> this in Racket modules? As a first attempt at mixing Racket and MPL I tried:
> #lang racket
> (require (lib "mpl/sum-product-power.sls"))
> When I multiply 'x' times 'x' I get:
> > (* 'x 'x)
> (mcons '^ (mcons 'x (mcons 2 '())))
> In Petite Chez Scheme I get:
> > (* 'x 'x)
> (^ x 2)
> I guess the 'mcons' stuff is due to the mutable/immutable pairs difference
> between R6RS and default racket.
> In R6RS, as shown above, I usually do '(import (mpl rnrs-sans) (mpl
> all))'. The library '(mpl rnrs-sans)' is equivalent to '(rnrs)' except for
> procedures which conflict name-wise with MPL procedures. Would you
> recommend setting up something similar for Racket so that the user can do:
> #lang racket-sans
> (require (lib "mpl/all.sls"))
> Thanks for any hints and tips!
> The MPL github project page is at:
> https://github.com/dharmatech/**mpl <https://github.com/dharmatech/mpl>
> Ed
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/**users <http://lists.racket-lang.org/users>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20120119/e3f0d6af/attachment.html>

Posted on the users mailing list.