(cl.info)Common Lisp Compatibility
Next: Old CL Compatibility Prev: Efficiency Concerns Up: Top
Common Lisp Compatibility
Following is a list of all known incompatibilities between this package
and Common Lisp as documented in Steele (2nd edition).
Certain function names, such as `member', `assoc', and `floor', were
already taken by (incompatible) Emacs Lisp functions; this package
appends `*' to the names of its Common Lisp versions of these functions.
The word `defun*' is required instead of `defun' in order to use
extended Common Lisp argument lists in a function. Likewise,
`defmacro*' and `function*' are versions of those forms which
understand full-featured argument lists. The `&whole' keyword does not
work in `defmacro' argument lists (except inside recursive argument
In order to allow an efficient implementation, keyword arguments use
a slightly cheesy parser which may be confused if a keyword symbol is
passed as the *value* of another keyword argument. (Specifically,
`(memq :KEYWORD REST-OF-ARGUMENTS)' is used to scan for `:KEYWORD'
among the supplied keyword arguments.)
The `eql' and `equal' predicates do not distinguish between IEEE
floating-point plus and minus zero. The `equalp' predicate has several
differences with Common Lisp; Note: Predicates..
The `setf' mechanism is entirely compatible, except that
setf-methods return a list of five values rather than five values
directly. Also, the new "`setf' function" concept (typified by `(defun
(setf foo) ...)') is not implemented.
The `do-all-symbols' form is the same as `do-symbols' with no
OBARRAY argument. In Common Lisp, this form would iterate over all
symbols in all packages. Since Emacs obarrays are not a first-class
package mechanism, there is no way for `do-all-symbols' to locate any
but the default obarray.
The `loop' macro is complete except that `loop-finish' and type
specifiers are unimplemented.
The multiple-value return facility treats lists as multiple values,
since Emacs Lisp cannot support multiple return values directly. The
macros will be compatible with Common Lisp if `values' or `values-list'
is always used to return to a `multiple-value-bind' or other
multiple-value receiver; if `values' is used without
`multiple-value-...' or vice-versa the effect will be different from
Many Common Lisp declarations are ignored, and others match the
Common Lisp standard in concept but not in detail. For example, local
`special' declarations, which are purely advisory in Emacs Lisp, do not
rigorously obey the scoping rules set down in Steele's book.
The variable `*gensym-counter*' starts out with a pseudo-random
value rather than with zero. This is to cope with the fact that
generated symbols become interned when they are written to and loaded
back from a file.
The `defstruct' facility is compatible, except that structures are
of type `:type vector :named' by default rather than some special,
distinct type. Also, the `:type' slot option is ignored.
The second argument of `check-type' is treated differently.
automatically generated by info2www