[plt-scheme] knowing if dynamic-require will succeed
Your problem is that
(if (eq? 'unix (system-type))
(if (overrule)
... needs to run in mred
... should run in mzscheme)
must run in mred)
Perhaps you'd be best off writing a tiny launch script that triggers
the correct executable after gathering enough information.
-- Matthias
On Sep 5, 2009, at 11:54 AM, Lee Spector wrote:
>
> In an earlier thread I was provided with a nice automatic way to
> make my code run with the plot module and produce graphical output
> when I run it on my mac in DrScheme, but run without the plot module
> and without graphical output when I run it on my linux cluster with
> mzscheme. The final version of this is below. It uses (equal? 'unix
> (system-type)) to produce a definition that is either void or a
> plotting routine that uses dynamic-require to refer to the plot and
> points functions.
>
> I now plan to share this with students, some of whom I imagine may
> be running it in a graphical unix environment in which plot IS
> available, or alternatively in a non-unix environment in which plot
> is NOT available (like maybe in mzscheme under Windows or something
> like that, I guess).
>
> So what I would ideally like to do is to replace (equal? 'unix
> (system-type)) with something that asks what I really need to know,
> which is "Will dynamically requiring plot fail?"
>
> Is there a way to do this?
>
> I did see in the documentation for dynamic-require that there is an
> optional fail-thunk argument, and I thought that that might provide
> the solution. The second version of plot-data below is my attempt to
> use this. But it doesn't work -- when I run it on my cluster it gives:
>
> dynamic-require: unknown module: '#%mred-kernel; need to run in mred
> instead of mzscheme
>
> My next thoughts were that I might find a solution either in dynamic-
> wind or by providing an exception handler, but both of these look
> fairly complicated and I would appreciate any suggestions that any
> of you have.
>
> Thanks,
>
> -Lee
>
>
> ;; works correctly but isn't really basing the decision on the right
> criterion
> (define plot-data
> (if (equal? 'unix (system-type))
> void
> (lambda (data x-label y-label)
> ((dynamic-require 'plot 'plot)
> ((dynamic-require 'plot 'points) (for/list ((i (number-list
> (length data))))
> (vector i (list-ref data i)))
> #:sym 'oplus)
> #:x-min 0
> #:x-max (length data)
> #:y-min 0
> #:y-max (+ 1 (apply max data))
> #:x-label x-label
> #:y-label y-label))))
>
> ;; the fail-thunk doesn't prevent an error if the plot module isn't
> available
> (define plot-data
> (let* ((plot-module-available #t)) ;; assume it's available, but
> then check
> (dynamic-require 'plot 'plot (lambda () (set! plot-module-
> available #f))) ;; is it really available?
> (if plot-module-available
> (lambda (data x-label y-label)
> ((dynamic-require 'plot 'plot)
> ((dynamic-require 'plot 'points) (for/list ((i (number-
> list (length data))))
> (vector i (list-ref
> data i)))
> #:sym 'oplus)
> #:x-min 0
> #:x-max (length data)
> #:y-min 0
> #:y-max (+ 1 (apply max data))
> #:x-label x-label
> #:y-label y-label))
> void)))
>
>
> --
> Lee Spector, Professor of Computer Science
> School of Cognitive Science, Hampshire College
> 893 West Street, Amherst, MA 01002-3359
> lspector at hampshire.edu, http://hampshire.edu/lspector/
> Phone: 413-559-5352, Fax: 413-559-5438
>
> Check out Genetic Programming and Evolvable Machines:
> http://www.springer.com/10710 - http://gpemjournal.blogspot.com/
>
> _________________________________________________
> For list-related administrative tasks:
> http://list.cs.brown.edu/mailman/listinfo/plt-scheme