[Openmcl-devel] Re: Trying to get LISA to run
Gary Byers
gb at clozure.com
Tue Mar 29 05:51:52 PST 2005
On Tue, 29 Mar 2005, nrms wrote:
> Okay, no wonder nobody replied, since what I wrote was nonsense.
Sorry. Replying was on my to-do list. Honest.
> Actually there 2 problems, the first one is that require stuff (that
> one I wrongly thought caused all this mess). I guess this one I could
> circumvent by loading the needed file explicitly.
CCL:*MODULE-SEARCH-PATH* contains a list of directories; REQUIRE
looks in each of these for a loadable file that "matches" the name of the
module. So,
(defun lisa-debugger ()
(translate-logical-pathname "lisa:debugger;lisa-debugger.lisp"))
#+openmcl
(pushnew (pathname-directory (lisa-debugger))
ccl:*module-search-path*
:test #'equal)
should cause (
? (REQUIRE "LISA-DEBUGGER")
to find and load "lisa-debugger.lisp".
(There are other ways of controlling REQUIRE's behavior; the one based
on *MODULE-SEARCH-PATH* is built-in and pretty simple, but you can
define your own functions to map module names to one or more files.)
>
> The major problem seems to be that in a file called epilogue.lisp I got
> the following code
>
> (set-dispatch-macro-character
> #\# #\? #'(lambda (strm subchar arg)
>
> which is the evildoer. Is the problem here that character "?" is the
> prompt in openmcl? Is there an intelligent way to solve this conflict?
OpenMCL uses #? to reference foreign variables, as in:
...
(if (zerop #?errno)
(format t "~&No C errors lately."))
(That's a bad example, because "errno" may not be a real variable in a
multi-threaded environment.)
#? is used to reference some foreign variables in the Cocoa example;
redefining the reader macro would probably cause problems when loading
that example.
>
> Thank you for any hints.
It should probably be easier than it is to get your hands on a totally
"standard" readtable (one that only has CL functionality defined, and
doesn't include extensions like #_, #$, and #?) in OpenMCL. The fact
that that doesn't happen that way is probably a bug, but it wouldn't
necessarily prevent conflicts like this if it was fixed.
I'm not really sure how LISA's used, but it seems that the available
options are:
1) Use a different dispatching macro that happens not to conflict with
the one provided by the implementation (e.g., #!, maybe.)
2) Use the same dispatching macro and clobber the implementation's
definition (making it harder to load examples or other code that uses
OpenMCL's #?.)
3) Use separate readtables (with separate definitions of #?).
(3) is probably the cleanest solution, but may be somewhat awkward for
users.
>
> Regards,
>
> Nils Stritzel
>
>
>
> Am 28.03.2005 um 18:18 schrieb nrms:
>
> > Hi!
> >
> > I am trying to get LISA (Lisp Intelligent Software Agents) to run with
> > openmcl. Actually I have already thought I had suceeded, but as it
> > turned out, I haven't.
> > The following is how it is supposed to work with other lisps. I tried
> > to figure out one solution myself, but it failed with the interesting
> > side-effect
> > the (require "cocoa") did not work anymore after calling my "solution".
> >
> > (defun lisa-debugger ()
> > (translate-logical-pathname "lisa:debugger;lisa-debugger.lisp"))
> >
> > #+Allegro
> > (setf system:*require-search-list*
> > (append system:*require-search-list*
> > `(:newest ,(lisa-debugger))))
> >
> > #+clisp
> > (setf custom:*load-paths*
> > (append custom:*load-paths* `(,(lisa-debugger))))
> >
> > #+LispWorks
> > (let ((Loadable-modules `(("lisa-debugger" . ,(lisa-debugger)))))
> >
> > (defadvice (require lisa-require :around)
> > (module-name &optional pathname)
> > (let ((lisa-module
> > (find module-name loadable-modules
> > :test #'string=
> > :key #'car)))
> > (if (null lisa-module)
> > (call-next-advice module-name pathname)
> > (call-next-advice module-name (cdr lisa-module))))))
> >
> > So this what I thought that it might be a solution. As I figured out
> > by now it is obviously wrong; ccl:*module-search-path* is not what I
> > am looking for,
> > since it only contains directories and I try to append a file name.
> > But what is the correct way to solve this?
> >
> > #+Openmcl
> > (setf ccl:*module-search-path*
> > (append ccl:*module-search-path* `(,(lisa-debugger))))
> >
> > Any help or advice appreciated.
> >
> > Nils Stritzel
> >
>
> _______________________________________________
> Openmcl-devel mailing list
> Openmcl-devel at clozure.com
> http://clozure.com/mailman/listinfo/openmcl-devel
>
>
More information about the Openmcl-devel
mailing list