[Ecls-list] Any support for a default load path list?

Dave Pearson davep at davep.org
Mon Jun 30 06:48:11 UTC 2003

* Juan Jose Garcia-Ripoll <worm at arrakis.es> [2003-06-30 15:04:47 +0200]:

> On Monday 30 June 2003 13:51, Dave Pearson wrote:
> > Does ecl have any sort of support for a default load path list? [SNIP]
> [SNIP]
> Does it fit your needs? 

Sort of, although I'd probably then want to hack `require' so that it makes
use of that sort of code.

By way of an explanation for what I'm asking: I dabble with Common Lisp and,
as part of that dabbling, I often knock up handy little tools and try and
knock them up such that they'll work with all of the free and non-free CLs
that I can get running on my GNU/Linux box (and often on my Windows box
too). I tend to maintain a library of compiled code, for each of the CLs I
use, in ~/lib/lisp. I then use any available ~/.init file (hence my previous
question about such an init file for ecl) to set the search path for loading
stuff so that any CL I run will find these files.

This sort of nicely splices in with some stuff you mentioned a while ago
about using ECL for writing "scripts".

>                         How do the other lisps behave?

Here's what I have working so far:

o CLISP uses a variable called `*load-paths*', in this case I've got this:

| ;; Add my own lisp directory to the load-path.
| (push "~/lib/lisp/**/" *load-paths*)

 in its init file.

o CMUCL uses some sort of search system that I think I've partly got a
  handle on. The code I've used for working with this is:

| ;; Add my own local library to the modules list.
| (push #p"home:lib/lisp/" (search-list "modules:"))

o SBCL seems to use a list of functions for finding modules (presumably this
  only interacts with `require', which fits my needs). Here I've got:

| ;; Support for loading from local library.
| (push (lambda (module)
|         (let ((target (make-pathname :directory
|                                      '(:absolute "home" "davep" "lib" "lisp")
|                                      :name (format nil "~A" module)
|                                      :type "fasl")))
|           (when (probe-file target)
|             (load target))))
|       *module-provider-functions*)

All of the above let me use (require :foo) in the REPL or in code (yes, I
know that `require' is deprecated but it's bloody handy for this sort of
thing and it does let me do the "interesting" work in the init files rather
than having to muck about in code).

I am, of course, approaching this from more of a "scripting" angle than I am
a "building Lisp software" angle.

Dave Pearson

More information about the ecl-devel mailing list