One caveat, if you're going to do this kind of thing: be sure to bind all the variables that control the printer (on the sending end) and reader (on the receiving end) -- *package*, *print-base*, *read-base*, etc.
Years ago I was working on a project on the Lisp Machines that involved creating a package that did not use the lisp: package (basically, I was implementing another language that had its own names for things). I discovered that when I was editing a file in this package, and tried to access the file server, I would get mysterious errors deep in the code that implemented the NFILE protocol. As it turned out, ZMacs was binding *package* to the package of the file I was editing, and the NFILE client implementation was reading an sexp sent by the server without binding *package*, so that occurrences of "NIL" in that sexp were not being read as lisp:nil ("the chosen nil", as Bernie Greenberg used to call it).
Discovering that bug left me with a permanent dislike and distrust of special variables. I still use them occasionally, but I try to keep them to a bare minimum.
-- Scott
On Wed, Apr 27, 2011 at 8:07 AM, William Halliburton whalliburton@gmail.com wrote:
How to pass sexps as transparently between the two Lisps as possible?
Can you please elaborate on "transparently"? The first thing out of my toolbox when I need to simply get some data between lisps is just: (send (print1 payload) other-server) using whatever mechanism. and then (let ((*print-eval* nil)) (read-from-string payload))
pro mailing list pro@common-lisp.net http://common-lisp.net/cgi-bin/mailman/listinfo/pro