By the way, there's a clall script:
http://paste.lisp.org/display/123280
http://git.informatimago.com/viewgit/index.php?a=viewblob&p=public/bin&h=3e45c94ed4db651943a6d3f3edd4e72f36e218e9&hb=e15ad2e48525a89b3b3f921a7557311194e07d36&f=clall
that you can use to run snippets on all the implementations you have
installed, so that you can easily see the differences.
Eg. the package-use-list of the cl-user package is implementation
dependant. A conforming program should not depend on it.
$ clall -r '(package-use-list :cl-user)'
Armed Bear Common Lisp --> (#<PACKAGE JAVA> #<PACKAGE EXTENSIONS> #<PACKAGE COMMON-LISP>)
Clozure Common Lisp --> (#<Package "CCL"> #<Package "COMMON-LISP">)
CLISP --> (#<PACKAGE COMMON-LISP> #<PACKAGE EXT>)
CMU Common Lisp --> (#<The EXTENSIONS package, 233/503 internal, 394/494 external>
#<The COMMON-LISP package, 0/5 internal, 978/1227 external>)
ECL --> (#<"COMMON-LISP" package>)
SBCL --> (#<PACKAGE "COMMON-LISP">
#<PACKAGE "SB-ALIEN"> #<PACKAGE "SB-DEBUG">
#<PACKAGE "SB-EXT"> #<PACKAGE "SB-GRAY">
#<PACKAGE "SB-PROFILE">)
========================================================================
Another example: this expression could be non-conforming (if we used the
result in a way that would lead to different results):
$ clall -r '(let ((x 1) (y 0)) (handler-case (/ x y) (error (err) (princ-to-string err))))'
Armed Bear Common Lisp --> "Arithmetic error DIVISION-BY-ZERO signalled."
Clozure Common Lisp --> "DIVISION-BY-ZERO detected"
CLISP --> "/: division by zero
"
CMU Common Lisp --> "Arithmetic error DIVISION-BY-ZERO signalled.
Operation was KERNEL::DIVISION, operands (1 0)."
ECL --> "#<a DIVISION-BY-ZERO>"
SBCL --> "arithmetic error DIVISION-BY-ZERO signalled
Operation was SB-KERNEL::DIVISION, operands (1 0)."
========================================================================
But this one is conforming: you will get the same result on all
conforming implementation:
$ clall -r '(let ((x 1) (y 0)) (handler-case (/ x y) (division-by-zero () (quote division-by-zero))))'
Armed Bear Common Lisp --> DIVISION-BY-ZERO
Clozure Common Lisp --> DIVISION-BY-ZERO
CLISP --> DIVISION-BY-ZERO
CMU Common Lisp --> DIVISION-BY-ZERO
ECL --> DIVISION-BY-ZERO
SBCL --> DIVISION-BY-ZERO
========================================================================