Saturday, April 24, 2010

CGOL on ABCL

The other day I received an e-mail from an ABCL user, containing the following:

I took a brief look at cgol. Neat! Interestingly, I tried it in
clisp, sbcl, ecl, cmulisp, and abcl, and it only works in abcl!


For those wanting to play with CGOL too, it's available from the CMU Artificial Intelligence Repository.

Seems like ABCL is Common Lisp conformant enough to be able to run some of the older lisp code available: this source stems from 1993 and is unchanged since - judging by the timestamps in the download archive.

3 comments:

  1. from when i last played with CGOL, i recall that it funcalled lists of `(lambda ,foo ,bar) without first COMPILE'ing or COERCE'ing or even EVAL'ing them.

    In cgol.lisp :

    (cond ((numberp token) (list 'lambda nil token)) (t (getden nudl)))))

    That list of (LAMBDA NIL ...) is later funcalled directly, which is undefined.

    Does ABCL allow the funcalling of lists? If so, is this a) intentional and b) a good idea?

    Just thought i'd point that out :)

    ReplyDelete
  2. Old lisp code laying around is not at all "conformant". You will find this with CGOL, with older versions of Maxima and other interesting software that was written at the time of coexistence between various dialects and old implementations -- CGOL itself mentions MACLISP --.

    As Drew pointed out, CGOL itself is using old things like building a function as a list, or returning multiple values from a reader macro, all of which are not defined or defined not to work in the "modern" ANSI Common Lisp specification.

    So if you want to promote ABCL, which I encourage you to, please use another example and avoid the implementations war :-)

    ReplyDelete
  3. @Juanjo: The page at the CMU AI Repository the link points to explicitly refers to "Common Lisp". That's what caused the confusion.

    Also, I'm not trying to cause an implementation war, just trying to show that ABCL is - to a certain extent - up to par with many of the other implementations: I'm trying to shake off the image of "incomplete" implementation. We're really not that incomplete anymore. Agreed; said example doesn't really help :-)

    @Drew: it has to be intentional; given ABCL's structure, it's not something that happens by accident.

    Whether it's something desirable; I have to think about that. If older Lisp code relies on it, I see value in keeping it around. There's enough Lisp software floating around which doesn't work out of the box

    ReplyDelete