1. Introduction

1.1 Scope, Purpose, and History#

Scope, Purpose, and History

1.1.1 Scope and Purpose#

The specification set forth in this document is designed to promote the portability of Common Lisp programs among a variety of data processing systems. It is a language specification aimed at an audience of implementors and knowledgeable programmers. It is neither a tutorial nor an implementation guide.

1.1.2 History#

Lisp is a family of languages with a long history. Early key ideas in Lisp were developed by John McCarthy during the 1956 Dartmouth Summer Research Project on Artificial Intelligence. McCarthy's motivation was to develop an algebraic list processing language for artificial intelligence work. Implementation efforts for early dialects of Lisp were undertaken on the IBM 704, the IBM 7090, the Digital Equipment Corporation (DEC) PDP-1, the DEC PDP-6, and the PDP-10. The primary dialect of Lisp between 1960 and 1965 was Lisp 1.5. By the early 1970's there were two predominant dialects of Lisp, both arising from these early efforts: MacLisp and Interlisp. For further information about very early Lisp dialects, see The Anatomy of Lisp or Lisp 1.5 Programmer's Manual.

MacLisp improved on the Lisp 1.5 notion of special variables and error handling. MacLisp also introduced the concept of functions that could take a variable number of arguments, macros, arrays, non-local dynamic exits, fast arithmetic, the first good Lisp compiler, and an emphasis on execution speed. This next sentence transplanted from a later paragraph about PSL. JonL says: My recollection was that it was closer to 100 than to 50. More likely, it had been received by about 100 sites, and was actually in continued usage by 50 at the end of the decade. KMP: Changed "was available" to "was in use" to compensate. (6-Dec-91)By the end of the 1970's, MacLisp was in use at over 50 sites. From about 1969 onward Jonl White was the dominant force behind Maclisp.For further information about Maclisp, see Maclisp Reference Manual, Revision 0 or The Revised Maclisp Manual.

Interlisp introduced many ideas into Lisp programming environments and methodology. One of the Interlisp ideas that influenced Common Lisp was an iteration construct implemented by Warren Teitelman that inspired the loop macro used both on the Lisp Machines and in MacLisp, and now in Common Lisp. For further information about Interlisp, see Interlisp Reference Manual.

Although the first implementations of Lisp were on the IBM 704 and the IBM 7090, later work focussed on the DEC PDP-6 and, later, PDP-10 computers, the latter being the mainstay of Lisp and artificial intelligence work at such places as Massachusetts Institute of Technology (MIT), Stanford University, and Carnegie Mellon University (CMU) from the mid-1960's through much of the 1970's. The PDP-10 computer and its predecessor the PDP-6 computer were, by design, especially well-suited to Lisp because they had 36-bit words and 18-bit addresses. This architecture allowed a cons cell to be stored in one word; single instructions could extract the car and cdr parts. The PDP-6 and PDP-10 had fast, powerful stack instructions that enabled fast function calling. But the limitations of the PDP-10 were evident by 1973: it supported a small number of researchers using Lisp, and the small, 18-bit address space (218 = 262,144 words) limited the size of a single program. One response to the address space problem was the Lisp Machine, a special-purpose computer designed to run Lisp programs. The other response was to use general-purpose computers with address spaces larger than 18 bits, such as the DEC VAX and the S-1 Mark IIA. For further information about S-1 Common Lisp, see “S-1 Common Lisp Implementation.”

The Lisp machine concept was developed in the late 1960's. In the early 1970's, Peter Deutsch, working with Daniel Bobrow, implemented a Lisp on the Alto, a single-user minicomputer, using microcode to interpret a byte-code implementation language. Shortly thereafter, Richard Greenblatt began work on a different hardware and instruction set design at MIT. Although the Alto was not a total success as a Lisp machine, a dialect of Interlisp known as Interlisp-D became available on the D-series machines manufactured by Xerox—the Dorado, Dandelion, Dandetiger, and Dove (or Daybreak). An upward-compatible extension of MacLisp called Lisp Machine Lisp became available on the early MIT Lisp Machines. Commercial Lisp machines from Xerox, Lisp Machines (LMI), and Symbolics were on the market by 1981. For further information about Lisp Machine Lisp, see Lisp Machine Manual.

During the late 1970's, Lisp Machine Lisp began to expand towards a much fuller language. Sophisticated lambda lists, setf, multiple values, and structures like those in Common Lisp are the results of early experimentation with programming styles by the Lisp Machine group. Jonl White and others migrated these features to MacLisp. Around 1980, Scott Fahlman and others at CMU began work on a Lisp to run on the Scientific Personal Integrated Computing Environment (SPICE) workstation. One of the goals of the project was to design a simpler dialect than Lisp Machine Lisp.

The Macsyma group at MIT began a project during the late 1970's called the New Implementation of Lisp (NIL) for the VAX, which was headed by White. One of the stated goals of the NIL project was to fix many of the historic, but annoying, problems with Lisp while retaining significant compatibility with MacLisp. At about the same time, a research group at Stanford University and Lawrence Livermore National Laboratory headed by Richard P. Gabriel began the design of a Lisp to run on the S-1 Mark IIA supercomputer. S-1 Lisp, never completely functional, was the test bed for adapting advanced compiler techniques to Lisp implementation. Eventually the S-1 and NIL groups collaborated. For further information about the NIL project, see “NIL—A Perspective.”

The first efforts towards Lisp standardization were Standard Lisp and Portable Standard Lisp (PSL). In 1969, Anthony Hearn and Martin Griss defined Standard Lisp---a subset of Lisp~1.5 and other dialects---to transport REDUCE, a symbolic algebra system. PSL was designed to provide more control over the environment and the compiler. At the end of the 1970's, PSL ran on about a dozen different computers. PSL and Franz Lisp---a MacLisp-like dialect for Unix machines---were the first examples of widely available Lisp dialects on multiple hardware platforms. MacLisp was available at over 50 sites. For further information about Standard Lisp, see ``{\StandardLispReport}.'' Sandra: This paragraph contains inaccuracies and is not well-organized. Suggested rewrite [taken -kmp] below.

The first effort towards Lisp standardization was made in 1969, when Anthony Hearn and Martin Griss at the University of Utah defined Standard Lisp—a subset of Lisp 1.5 and other dialects—to transport REDUCE, a symbolic algebra system. During the 1970's, the Utah group implemented first a retargetable optimizing compiler for Standard Lisp, and then an extended implementation known as Portable Standard Lisp (PSL). By the mid 1980's, PSL ran on about a dozen kinds of computers. For further information about Standard Lisp, see “Standard LISP Report.”

PSL and Franz Lisp—a MacLisp-like dialect for Unix machines—were the first examples of widely available Lisp dialects on multiple hardware platforms.

One of the most important developments in Lisp occurred during the second half of the 1970's: Scheme. Scheme, designed by Gerald J. Sussman and Guy L. Steele Jr., is a simple dialect of Lisp whose design brought to Lisp some of the ideas from programming language semantics developed in the 1960's. Sussman was one of the prime innovators behind many other advances in Lisp technology from the late 1960's through the 1970's. The major contributions of Scheme were lexical scoping, lexical closures, first-class continuations, and simplified syntax (no separation of value cells and function cells). Some of these contributions made a large impact on the design of Common Lisp. For further information about Scheme, see IEEE Standard for the Scheme Programming Language or “Revised3 Report on the Algorithmic Language Scheme.”

In the late 1970's object-oriented programming concepts started to make a strong impact on Lisp. At MIT, certain ideas from Smalltalk made their way into several widely used programming systems. Flavors, an object-oriented programming system with multiple inheritance, was developed at MIT for the Lisp machine community by Howard Cannon and others. At Xerox, the experience with Smalltalk and Knowledge Representation Language (KRL) led to the development of Lisp Object Oriented Programming System (LOOPS) and later Common LOOPS. For further information on Smalltalk, see Smalltalk-80: The Language and its Implementation. For further information on Flavors, see Flavors: A Non-Hierarchical Approach to Object-Oriented Programming.

These systems influenced the design of the Common Lisp Object System (CLOS). CLOS was developed specifically for this standardization effort, and was separately written up in “Common Lisp Object System Specification.” However, minor details of its design have changed slightly since that publication, and that paper should not be taken as an authoritative reference to the semantics of the object system as described in this document.

In 1980 Symbolics and LMI were developing Lisp Machine Lisp; stock-hardware implementation groups were developing NIL, Franz Lisp, and PSL; Xerox was developing Interlisp; and the SPICE project at CMU was developing a MacLisp-like dialect of Lisp called SpiceLisp.

In April 1981, after a DARPA-sponsored meeting concerning the splintered Lisp community, Symbolics, the SPICE project, the NIL project, and the S-1 Lisp project joined together to define Common Lisp. Initially spearheaded by White and Gabriel, the driving force behind this grassroots effort was provided by Fahlman, Daniel Weinreb, David Moon, Steele, and Gabriel. Common Lisp was designed as a description of a family of languages. The primary influences on Common Lisp were Lisp Machine Lisp, MacLisp, NIL, S-1 Lisp, Spice Lisp, and Scheme. Common Lisp: The Language is a description of that design. Its semantics were intentionally underspecified in places where it was felt that a tight specification would overly constrain Common Lisp research and use. Per X3J13. -kmp 05-Oct-93 Between 1984 and 1989, \clisp\ became a de facto standard.

In 1986 X3J13 was formed as a technical working group to produce a draft for an ANSI Common Lisp standard. Because of the acceptance of Common Lisp, the goals of this group differed from those of the original designers. These new goals included stricter standardization for portability, an object-oriented programming system, a condition system, iteration facilities, and a way to handle large character sets. To accommodate those goals, a new language specification, this document, was developed.

1.2 Organization of the Document#

Organization of the Document

This is a reference document, not a tutorial document. Where possible and convenient, the order of presentation has been chosen so that the more primitive topics precede those that build upon them; however, linear readability has not been a priority.

This document is divided into chapters by topic. Any given chapter might contain conceptual material, dictionary entries, or both.

Defined names within the dictionary portion of a chapter are grouped in a way that brings related topics into physical proximity. Many such groupings were possible, and no deep significance should be inferred from the particular grouping that was chosen. To see defined names grouped alphabetically, consult the index. For a complete list of defined names, see Section 1.9 (Symbols in the COMMON-LISP Package).

In order to compensate for the sometimes-unordered portions of this document, a glossary has been provided; see Chapter 26 (Glossary). The glossary provides connectivity by providing easy access to definitions of terms, and in some cases by providing examples or cross references to additional conceptual material.

For information about notational conventions used in this document, see Section 1.4 (Definitions).

For information about conformance, see Section 1.5 (Conformance).

For information about extensions and subsets, see Section 1.6 (Language Extensions) and Section 1.7 (Language Subsets).

For information about how programs in the language are parsed by the Lisp reader, see Chapter 2 (Syntax).

For information about how programs in the language are compiled and executed, see Chapter 3 (Evaluation and Compilation).

For information about data types, see Chapter 4 (Types and Classes). Not all types and classes are defined in this chapter; many are defined in chapter corresponding to their topic–for example, the numeric types are defined in Chapter 12 (Numbers). For a complete list of standardized types, see Figure 4–2.

For information about general purpose control and data flow, see Chapter 5 (Data and Control Flow) or Chapter 6 (Iteration).

1.3 Referenced Publications#

Referenced Publications

1.4 Definitions#

DefinitionsThis section contains notational conventions and definitions of terms used in this manual.

1.4.1 Notational Conventions#

The following notational conventions are used throughout this document.

========================================

1.4.1.1 Font Key#

Fonts are used in this document to convey information.

========================================

1.4.1.2 Modified BNF Syntax#

This specification uses an extended Backus Normal Form (BNF) to describe the syntax of Common Lisp macro forms and special forms. This section discusses the syntax of BNF expressions.

1.4.1.2.1 Splicing in Modified BNF Syntax#
The primary extension used is the following:

O

An expression of this form appears whenever a list of elements is to be spliced into a larger structure and the elements can appear in any order. The symbol O represents a description of the syntax of some number of syntactic elements to be spliced; that description must be of the form

O1||Ol

where each Oi can be of the form S or of the form S* or of the form S1. The expression ⟦O⟧ means that a list of the form

(Oi1Oij)1j

is spliced into the enclosing expression, such that if nm and 1n,mj, then either OinOim or Oin=Oim=Qk, where for some 1kn, Ok is of the form Qk*. Added to accomodate new LOOP BNF. -kmp 1-May-93Furthermore, for each Oin that is of the form Qk1, that element is required to appear somewhere in the list to be spliced.

For example, the expression

(x ⟦A | B* | C⟧ y)

means that at most one A, any number of B's, and at most one C can occur in any order. It is a description of any of these:

 (x y)
 (x B A C y)
 (x A B B B B B C y)
 (x C B A B B B y)

but not any of these:

 (x B B A A C C y)
 (x C B C y)

In the first case, both A and C appear too often, and in the second case C appears too often.

I added this notation to make the LOOP bvl easier to specify. -kmp 29-Apr-93

The notation ⟦O1 | O2 | + adds the additional restriction that at least one item from among the possible choices must be used. For example:

(x ⟦A | B* | C⟧+ y)

means that at most one A, any number of B's, and at most one C can occur in any order, but that in any case at least one of these options must be selected. It is a description of any of these:

 (x B y)
 (x B A C y)
 (x A B B B B B C y)
 (x C B A B B B y)

but not any of these:

 (x y)
 (x B B A A C C y)
 (x C B C y)

In the first case, no item was used; in the second case, both A and C appear too often; and in the third case C appears too often.

Also, the expression:

(x ⟦A1 | B1 | C⟧ y)

can generate exactly these and no others:

 (x A B C y)
 (x A C B y)
 (x A B y)
 (x B A C y)
 (x B C A y)
 (x B A y)
 (x C A B y)
 (x C B A y)

1.4.1.2.2 Indirection in Modified BNF Syntax#
An indirection extension is introduced in order to make this new syntax more readable:

O

If O is a non-terminal symbol, the right-hand side of its definition is substituted for the entire expression ↓O. For example, the following BNF is equivalent to the BNF in the previous example:

(x ⟦↓O⟧ y)

O ::= A | B* | C

1.4.1.2.3 Additional Uses for Indirect Definitions in Modified BNF Syntax#
In some cases, an auxiliary definition in the BNF might appear to be unused within the BNF, but might still be useful elsewhere. For example, consider the following definitions:

case keyform {↓normal-clause}* [↓otherwise-clause] {result}*

ccase keyplace {↓normal-clause}* {result}*

ecase keyform {↓normal-clause}* {result}*

normal-clause ::= (keys {form}*)
otherwise-clause ::= ({otherwise | t} {form}*)
clause ::= normal-clause | otherwise-clause

Here the term “clause” might appear to be “dead” in that it is not used in the BNF. However, the purpose of the BNF is not just to guide parsing, but also to define useful terms for reference in the descriptive text which follows. As such, the term “clause” might appear in text that follows, as shorthand for “normal-clause or otherwise-clause.”

========================================

1.4.1.3 Special Symbols#

The special symbols described here are used as a notational convenience within this document, and are part of neither the Common Lisp language nor its environment.

========================================

1.4.1.4 Objects with Multiple Notations#

Some objects in Common Lisp can be notated in more than one way. In such situations, the choice of which notation to use is technically arbitrary, but conventions may exist which convey a “point of view” or “sense of intent.”

----------------------------------------

1.4.1.4.1 Case in Symbols#

While case is significant in the process of interning a symbol, the Lisp reader, by default, attempts to canonicalize the case of a symbol prior to interning; see Section 23.1.2 (Effect of Readtable Case on the Lisp Reader). As such, case in symbols is not, by default, significant. Throughout this document, except as explicitly noted otherwise, the case in which a symbol appears is not significant; that is, HELLO, Hello, hElLo, and hello are all equivalent ways to denote a symbol whose name is "HELLO".

The characters backslash and vertical-bar are used to explicitly quote the case and other parsing-related was "attributes" but now that attributes has formaly meaning, not sure if it's too limiting here, so use a general term. -kmp 26-Jan-92aspects of characters. As such, the notations |hello| and \h\e\l\l\o are equivalent ways to refer to a symbol whose name is "hello", and which is distinct from any symbol whose name is "HELLO".

The symbols that correspond to Common Lisp defined names have uppercase names even though their names generally appear in lowercase in this document.

----------------------------------------

1.4.1.4.2 Numbers#
Although Common Lisp provides a variety of ways for programs to manipulate the input and output radix for rational numbers, all numbers in this document are in decimal notation unless explicitly noted otherwise.

----------------------------------------

1.4.1.4.3 Use of the Dot Character#
The dot appearing by itself in an expression such as

(item1 item2 . tail)

means that tail represents a list of objects at the end of a list. For example,

(A B C . (D E F))

is notationally equivalent to:

(A B C D E F)

Although dot is a valid constituent character in a symbol, no standardized symbols contain the character dot, so a period that follows a reference to a symbol at the end of a sentence in this document should always be interpreted as a period and never as part of the symbol's name. For example, within this document, a sentence such as “This sample sentence refers to the symbol car.” confusion about fonts below made more consistent w/previous section on symbol names --sjl 13 Mar 1992 refers to a function named ``\funref{car}'' with three letters in its name, and never to a four-letter symbol ``\funref{car.}''refers to a symbol whose name is "CAR" (with three letters), and never to a four-letter symbol "CAR."

----------------------------------------

1.4.1.4.4 NIL#

nil has a variety of meanings. It is a symbol in the common-lisp package with the name "NIL", it is boolean (and generalized boolean) false, it is the empty list, and it is the name of the empty type (a subtype of all types).

Within Common Lisp, nil can be notated interchangeably as either NIL or (). By convention, the choice of notation offers a hint as to which of its many roles it is playing.

For Evaluation?NotationTypically Implied Role
Yesniluse as a boolean.
Yes'niluse as a symbol.
Yes'()use as an empty list
Noniluse as a symbol or boolean.
No()use as an empty list.

Figure 1–1. Notations for NIL

Within this document only, nil is also sometimes notated as false to emphasize its role as a boolean.

For example:

 (print ())                          ;avoided
 (defun three nil 3)                 ;avoided 
 '(nil nil)                          ;list of two symbols
 '(() ())                            ;list of empty lists
 (defun three () 3)                  ;Emphasize empty parameter list.
 (append '() '()) → ()              ;Emphasize use of empty lists
 (not nil) → true                   ;Emphasize use as Boolean false
 (get 'nil 'color)                   ;Emphasize use as a symbol

A function is sometimes said to “be false” or “be true” in some circumstance. Since no function object can be the same as nil and all function objects represent true when viewed as booleans, it would be meaningless to say that the function was literally false and uninteresting to say that it was literally true. Instead, these phrases are just traditional alternative ways of saying that the function “returns false” or “returns true,” respectively.

========================================

1.4.1.5 Designators#

A designator is an object that denotes another object.

!!! RPG: Not clear. Rewrite.Where a parameter of an operator is described as a designator, the description of the operator is written in a way that assumes that the value of the parameter is the denoted object; that is, that the parameter is already of the denoted type. (The specific nature of the object denoted by a “⟪type⟫ designator” or a “designator for a ⟪type⟫” can be found in the Glossary entry for “⟪type⟫ designator.”)

For example, “nil” and “the value of *standard-output*” are operationally indistinguishable as stream designators. Similarly, the symbol foo and the string "FOO" are operationally indistinguishable as string designators.

Except as otherwise noted, in a situation where the denoted object might be used multiple times, it is implementation-dependent whether the object is coerced only once or whether the coercion occurs each time the object must be used.

For example, mapcar receives a function designator as an argument, and its description is written as if this were simply a function. In fact, it is implementation-dependent whether the function designator is coerced right away or whether it is carried around internally in the form that it was given as an argument and re-coerced each time it is needed. In most cases, conforming programs cannot detect the distinction, but there are some pathological situations (particularly those involving self-redefining or mutually-redefining functions) which do conform and which can detect this difference. The following program is a conforming program, but might or might not have portably correct results, depending on whether its correctness depends on one or the other of the results:

 (defun add-some (x) 
   (defun add-some (x) (+ x 2))
   (+ x 1)) → ADD-SOME
 (mapcar 'add-some '(1 2 3 4))
→ (2 3 4 5)
OR→ (2 4 5 6)

In a few rare situations, there may be a need in a dictionary entry to refer to the object that was the original designator for a parameter. Since naming the parameter would refer to the denoted object, the phrase “the ⟪parameter-name⟫ designator” can be used to refer to the designator which was the argument from which the value of ⟪parameter-name⟫ was computed.

========================================

1.4.1.6 Nonsense Words#

When a word having no pre-attached semantics is required (e.g., in an example), it is common in the Lisp community to use one of the words “foo,” “bar,” “baz,” and “quux.” For example, in

 (defun foo (x) (+ x 1))
the use of the name foo is just a shorthand way of saying “please substitute your favorite name here.”

These nonsense words have gained such prevalance of usage, that it is commonplace for newcomers to the community to begin to wonder if there is an attached semantics which they are overlooking—there is not.

!!! Barmar thinks \secref\InterpretingDictionaryEntries should move to someplace around here.

1.4.2 Error Terminology#

Situations in which errors might, should, or must be signaled are described in the standard. The wording used to describe such situations is intended to have precise meaning. The following list is a glossary of those meanings.

1.4.3 Sections Not Formally Part Of This Standard#

A lot of this seems to be just rationale. Does it really need to be included here? --sjl 13 Mar 92

Front matter and back matter, such as the “Table of Contents,” “Index,” “Figures,” “Credits,” and “Appendix” are not considered formally part of this standard, so that we retain the flexibility needed to update these sections even at the last minute without fear of needing a formal vote to change those parts of the document. These items are quite short and very useful, however, and it is not recommended that they be removed even in an abridged version of this document.

Within the concept sections, subsections whose names begin with the words “Note” or “Notes” or “Example” or “Examples” are provided for illustration purposes only, and are not considered part of the standard.

An attempt has been made to place these sections last in their parent section, so that they could be removed without disturbing the contiguous numbering of the surrounding sections in order to produce a document of smaller size.

Likewise, the “Examples” and “Notes” sections in a dictionary entry are not considered part of the standard and could be removed if necessary.

Nevertheless, the examples provide important clarifications and consistency checks for the rest of the material, and such abridging is not recommended unless absolutely unavoidable.

1.4.4 Interpreting Dictionary Entries#

The dictionary entry for each defined name is partitioned into sections. Except as explicitly indicated otherwise below, each section is introduced by a label identifying that section. The omission of a section implies that the section is either not applicable, or would provide no interesting information.

This section defines the significance of each potential section in a dictionary entry.

1.4.4.1 The “Affected By” Section of a Dictionary Entry#

For an operator, anything that can affect the side effects of or values returned by the operator.

For a variable, anything that can affect the value of the variable including functions that bind or assign it.

1.4.4.2 The “Arguments” Section of a Dictionary Entry#

This information describes the syntax information of entries such as those for declarations and special expressions which are never evaluated as forms, and so do not return values.

1.4.4.3 The “Arguments and Values” Section of a Dictionary Entry#

An English language description of what arguments the operator accepts and what values it returns, including information about defaults for parameters corresponding to omittable arguments (such as optional parameters and keyword parameters). For special operators and macros, their arguments are not evaluated unless it is explicitly stated in their descriptions that they are evaluated.

I added the first part of this sentence as editorial discretion since I believe we strongly feel that this is not specified otherwise, but we want to avoid an unexpected conflict in case it is. -kmp 9-May-94Except as explicitly specified otherwise, Added per X3J13 at May 4-5, 1994 meeting. -kmp 9-May-94the consequences are undefined if these type restrictions are violated.

1.4.4.4 The “Binding Types Affected” Section of a Dictionary Entry#

This information alerts the reader to the kinds of bindings that might potentially be affected by a declaration. Whether in fact any particular such binding is actually affected is dependent on additional factors as well. See the “Description” section of the declaration in question for details.

1.4.4.5 The “Class Precedence List” Section of a Dictionary Entry#

This appears in the dictionary entry for a class, and contains an ordered list of the classes defined by Common Lisp that must be in the class precedence list of this class.

It is permissible for other (implementation-defined) classes to appear in the implementation's class precedence list for the class.

It is permissible for either standard-object or structure-object to appear in the implementation's class precedence list; for details, see Section 4.2.2 (Type Relationships).

Except as explicitly indicated otherwise somewhere in this specification, no additional standardized classes may appear in the implementation's class precedence list.

By definition of the relationship between classes and types, the classes listed in this section are also supertypes of the type denoted by the class.

1.4.4.6 Dictionary Entries for Type Specifiers#

The atomic type specifiers are those defined names listed in Figure 4–2. Such dictionary entries are of kind “Class,” “Condition Type,” “System Class,” or “Type.” A description of how to interpret a symbol naming one of these types or classes as an atomic type specifier is found in the “Description” section of such dictionary entries.

The compound type specifiers are those defined names listed in Figure 4–3. Such dictionary entries are of kind “Class,” “System Class,” “Type,” or “Type Specifier.” A description of how to interpret as a compound type specifier a list whose car is such a symbol is found in the “Compound Type Specifier Kind,” “Compound Type Specifier Syntax,” “Compound Type Specifier Arguments,” and “Compound Type Specifier Description” sections of such dictionary entries.

1.4.4.6.1 The “Compound Type Specifier Kind” Section of a Dictionary Entry#
An “abbreviating” type specifier is one that describes a subtype for which it is in principle possible to enumerate the elements, but for which in practice it is impractical to do so.

A “specializing” type specifier is one that describes a subtype by restricting the type of one or more components of the type, such as element type or complex part type.

A “predicating” type specifier is one that describes a subtype containing only those objects that satisfy a given predicate.

A “combining” type specifier is one that describes a subtype in a compositional way, using combining operations (such as “and,” “or,” and “not”) on other types.

1.4.4.6.2 The “Compound Type Specifier Syntax” Section of a Dictionary Entry#
This information about a type describes the syntax of a compound type specifier for that type.

Whether or not the type is acceptable as an atomic type specifier is not represented here; see Section 1.4.4.6 (Dictionary Entries for Type Specifiers).

1.4.4.6.3 The “Compound Type Specifier Arguments” Section of a Dictionary Entry#
This information describes type information for the structures defined in the “Compound Type Specifier Syntax” section.

1.4.4.6.4 The “Compound Type Specifier Description” Section of a Dictionary Entry#
This information describes the meaning of the structures defined in the “Compound Type Specifier Syntax” section.

1.4.4.7 The “Constant Value” Section of a Dictionary Entry#

This information describes the unchanging type and value of a constant variable.

1.4.4.8 The “Description” Section of a Dictionary Entry#

A summary of the operator and all intended aspects of the operator, but does not necessarily include all the fields referenced below it (“Side Effects,” “Exceptional Situations,” etc..)

1.4.4.9 The “Examples” Section of a Dictionary Entry#

Examples of use of the operator. These examples are not considered part of the standard; see Section 1.4.3 (Sections Not Formally Part Of This Standard).

1.4.4.10 The “Exceptional Situations” Section of a Dictionary Entry#

Three kinds of information may appear here: This field does not include conditions that could be signaled by functions passed to and called by this operator as arguments or through dynamic variables, nor by executing subforms of this operator if it is a macro or special operator.

1.4.4.11 The “Initial Value” Section of a Dictionary Entry#

This information describes the initial value of a dynamic variable. Since this variable might change, see type restrictions in the “Value Type” section.

1.4.4.12 The “Argument Precedence Order” Section of a Dictionary Entry#

This information describes the argument precedence order. If it is omitted, the argument precedence order is the default (left to right).

1.4.4.13 The “Method Signature” Section of a Dictionary Entry#

The description of a generic function includes descriptions of the methods that are defined on that generic function by the standard. A method signature is used to describe the parameters and parameter specializers for each method. Methods defined for the generic function must be of the form described by the method signature.

F (x class) (y t) &optional z &key k

This signature indicates that this method on the generic function F has two required parameters: x, which must be a generalized instance of the class class; and y, which can be any object (i.e., a generalized instance of the class t). In addition, there is an optional parameter z and a keyword parameter k. This signature also indicates that this method on F is a primary method and has no qualifiers.

For each parameter, the argument supplied must be in the intersection of the type specified in the description of the corresponding generic function and the type given in the signature of some method (including not only those methods defined in this specification, but also implementation-defined or user-defined methods in situations where the definition of such methods is permitted).

1.4.4.14 The “Name” Section of a Dictionary Entry#

This section introduces the dictionary entry. It is not explicitly labeled. It appears preceded and followed by a horizontal bar.

In large print at left, the defined name appears; if more than one defined name is to be described by the entry, all such names are shown separated by commas.

In somewhat smaller italic print at right is an indication of what kind of dictionary entry this is. Possible values are:

This list believed correct as of 23-Oct-91 -kmp

1.4.4.15 The “Notes” Section of a Dictionary Entry#

Information not found elsewhere in this description which pertains to this operator. Among other things, this might include cross reference information, code equivalences, stylistic hints, implementation hints, typical uses. This information is not considered part of the standard; any conforming implementation or conforming program is permitted to ignore the presence of this information.

1.4.4.16 The “Pronunciation” Section of a Dictionary Entry#

This offers a suggested pronunciation for defined names so that people not in verbal communication with the original designers can figure out how to pronounce words that are not in normal English usage. This information is advisory only, and is not considered part of the standard. Added for Ida, who wondered why these didn't occur for every entry.For brevity, it is only provided for entries with names that are specific to Common Lisp and would not be found in Webster's Third New International Dictionary the English Language, Unabridged.

1.4.4.17 The “See Also” Section of a Dictionary Entry#

List of references to other parts of this standard that offer information relevant to this operator. This list is not part of the standard.

1.4.4.18 The “Side Effects” Section of a Dictionary Entry#

Anything that is changed as a result of the evaluation of the form containing this operator.

1.4.4.19 The “Supertypes” Section of a Dictionary Entry#

This appears in the dictionary entry for a type, and contains a list of the standardized types that must be supertypes of this type.

!!! Is this needed? Mail sent to `barmar' and `barrett' with subject "supertypes" asking for opinions. -kmp 10-Feb-92In implementations where there is a corresponding class, the order of the classes in the class precedence list is consistent with the order presented in this section.

1.4.4.20 The “Syntax” Section of a Dictionary Entry#

This section describes how to use the defined name in code. The “Syntax” description for a generic function describes the lambda list of the generic function itself, while the “Method Signatures” describe the lambda lists of the defined methods. The “Syntax” description for an ordinary function, a macro, or a special operator describes its parameters.

For example, an operator description might say:

F x y &optional z &key k

This description indicates that the function F has two required parameters, x and y. In addition, there is an optional parameter z and a keyword parameter k.

For macros and special operators, syntax is given in modified BNF notation; see Section 1.4.1.2 (Modified BNF Syntax). For functions a lambda list is given. Added per Barmar:In both cases, however, the outermost parentheses are omitted, and default value information is omitted.

1.4.4.20.1 Special “Syntax” Notations for Overloaded Operators#
If two descriptions exist for the same operation but with different numbers of arguments, then the extra arguments are to be treated as optional. For example, this pair of lines:

file-position stream position

file-position stream position-spec success-p

is operationally equivalent to this line:

file-position stream &optional position-spec result

and differs only in that it provides on opportunity to introduce different names for parameter and values for each case. The separated (multi-line) notation is used when an operator is overloaded in such a way that the parameters are used in different ways depending on how many arguments are supplied (e.g., for the function /) or the return values are different in the two cases (e.g., for the function file-position).

1.4.4.20.2 Naming Conventions for Rest Parameters#
Within this specification, if the name of a rest parameter is chosen to be a plural noun, use of that name in parameter font refers to the list to which the rest parameter is bound. Use of the singular form of that name in parameter font refers to an element of that list.

For example, given a syntax description such as:

F &rest arguments

it is appropriate to refer either to the rest parameter named arguments by name, or to one of its elements by speaking of “an argument,” “some argument,” “each argumentetc..

1.4.4.20.3 Requiring Non-Null Rest Parameters in the “Syntax” Section#
In some cases it is useful to refer to all arguments equally as a single aggregation using a rest parameter while at the same time requiring at least one argument. A variety of imperative and declarative means are available in code for expressing such a restriction, however they generally do not manifest themselves in a lambda list. For descriptive purposes within this specification,

F &rest arguments+

means the same as

F &rest arguments

but introduces the additional requirement that there be at least one argument.

1.4.4.20.4 Return values in the “Syntax” Section#
An evaluation arrow “→” precedes a list of values to be returned. For example:

F a b c x

indicates that F is an operator that has three required parameters (i.e., a, b, and c) and that returns one value (i.e., x). If more than one value is returned by an operator, the names of the values are separated by commas, as in:

F a b c x, y, z

1.4.4.20.4.1 No Arguments or Values in the “Syntax” Section#
If no arguments are permitted, or no values are returned, a special notation is used to make this more visually apparent. For example,

F ⟨no arguments ⟨no values

indicates that F is an operator that accepts no arguments and returns no values.

1.4.4.20.4.2 Unconditional Transfer of Control in the “Syntax” Section#
Some operators perform an unconditional transfer of control, and so never have any return values. Such operators are notated using a notation such as the following:

F a b c

1.4.4.21 The “Valid Context” Section of a Dictionary Entry#

This information is used by dictionary entries such as “Declarations” in order to restrict the context in which the declaration may appear.

A given “Declaration” might appear in a declaration (i.e., a declare expression), a proclamation (i.e., a declaim or proclaim form), or both.

1.4.4.22 The “Value Type” Section of a Dictionary Entry#

This information describes any type restrictions on a dynamic variable.

I added the first part of this sentence as editorial discretion since I believe we strongly feel that this is not specified otherwise, but we want to avoid an unexpected conflict in case it is. -kmp 9-May-94Except as explicitly specified otherwise, Added per X3J13 at May 4-5, 1994 meeting. -kmp 9-May-94the consequences are undefined if this type restriction is violated.

1.5 Conformance#

ComplianceThis standard presents the syntax and semantics to be implemented by a conforming implementation (and its accompanying documentation). In addition, it imposes requirements on conforming programs.

1.5.1 Conforming Implementations#

A conforming implementation shall adhere to the requirements outlined in this section.

1.5.1.1 Required Language Features#

A conforming implementation shall accept all features (including deprecated features) of the language specified in this standard, with the meanings defined in this standard.

A conforming implementation shall not require the inclusion of substitute or additional language elements in code in order to accomplish a feature of the language that is specified in this standard.

1.5.1.2 Documentation of Implementation-Dependent Features#

A conforming implementation shall be accompanied by a document that provides a definition of all implementation-defined aspects of the language defined by this specification.

In addition, a conforming implementation is encouraged (but not required) to document items in this standard that are identified as implementation-dependent, although in some cases such documentation might simply identify the item as “undefined.”

1.5.1.3 Documentation of Extensions#

A conforming implementation shall be accompanied by a document that separately describes any features accepted by the implementation that are not specified in this standard, but that do not cause any ambiguity or contradiction when added to the language standard. Such extensions shall be described as being “extensions to Common Lisp as specified by ANSI ⟪standard number⟫.”

1.5.1.4 Treatment of Exceptional Situations#

A conforming implementation shall treat exceptional situations in a manner consistent with this specification.

1.5.1.4.1 Resolution of Apparent Conflicts in Exceptional Situations#
If more than one passage in this specification appears to apply to the same situation but in conflicting ways, the passage that appears to describe the situation in the most specific way (not necessarily the passage that provides the most constrained kind of error detection) takes precedence.

1.5.1.4.1.1 Examples of Resolution of Apparent Conflicts in Exceptional Situations#
Suppose that function foo is a member of a set S of functions that operate on numbers. Suppose that one passage states that an error must be signaled if any function in S is ever given an argument of 17. Suppose that an apparently conflicting passage states that the consequences are undefined if foo receives an argument of 17. Then the second passage (the one specifically about foo) would dominate because the description of the situational context is the most specific, and it would not be required that foo signal an error on an argument of 17 even though other functions in the set S would be required to do so.

in Exceptional Situations}

1.5.1.5 Conformance Statement#

A conforming implementation shall produce a conformance statement as a consequence of using the implementation, or that statement shall be included in the accompanying documentation. If the implementation conforms in all respects with this standard, the conformance statement shall be

If the implementation conforms with some but not all of the requirements of this standard, then the conformance statement shall be

1.5.2 Conforming Programs#

Code conforming with the requirements of this standard shall adhere to the following:

This material is all covered in more detail in chapter 3 (in the section on constraints on externalizable objects). There is no need to repeat the material here. --sjl 13 Mar 92 \beginsubsubsection{Conforming Programs in Files} A \term{conforming program} whose source text is in a \term{compilation unit} must satisfy the following constraints: \beginlist \item{\bull} Any \term{top level form} in a \term{file} that alters \thevalueof{*package*} at compile time must also alter it at load time to a \term{similar} \term{package}. \item{\bull} If the first \term{non-atomic} \term{top level form} in the \term{file} is not a call to \macref{in-package}, then the \term{current package} at load time must be a \term{similar} \term{package} to the one in effect at compile time. \item{\bull} Any \term{symbol} in the source text \term{accessible} in the \term{current package} at compile time and whose \term{home package} is the package $P$ must be \term{accessible} in the \term{current package} at load time and must also be \term{accessible} in a package \term{similar} to $P$. \item{\bull} Any \term{symbol} in the source text that is an \term{external symbol} of the package $P$ at compile time must be an \term{external symbol} of package \term{similar} to $P$ at load time. \endlist In \term{situations} in which any of these conditions does not hold, an \term{implementation} might signal an error or might extend \clisp\ to handle the situation. \endsubsubsection%{Conforming Programs in Files}

1.5.2.1 Use of Implementation-Defined Language Features#

Note that conforming code may rely on particular implementation-defined values or features. Also note that the requirements for conforming code and conforming implementations do not require that the results produced by conforming code always be the same when processed by a conforming implementation. The results may be the same, or they may differ.

Moved to its own section (see below) per Dalton #1 (1st Public Review) by X3J13 vote May 4-5, 1994 (after 2nd public review). -kmp 9-May-94 !!! Barmar wonders if this is really the right place for the next sentence. \term{Portable code} is written using only \term{standard characters}.

Informally, the basic rules for conformance are as follows: 1. Conforming code is defined in terms of its structure, and not in terms of its results and side effects. 2. Conforming code is written using only the syntax specified in the standard, or syntax defined using the syntax extension mechanisms (macros and reader macros) specified in the standard. 3. Conforming code is written in only the sequence specified in the standard. 4. Conforming code is written using only the functions, macros, special forms, variables, and constants specified in the standard. 5. Conforming implementations provide the functionality and behavior specified in the standard. The definitions of all names and syntax that aren't specified in the standard and aren't provided by the implementation must accompany the code. 6. Conformance is not machine-checkable.

Conforming code may run in all conforming implementations, but might have allowable implementation-defined behavior that makes it non-portable code. Insofar as we allow options in the standard this will be true.For example, the following are examples of forms that are conforming, but that might return different values in different implementations:

 (evenp most-positive-fixnum) → implementation-dependent
 (random) → implementation-dependent
 (> lambda-parameters-limit 93) → implementation-dependent
 (char-name #\A) → implementation-dependent

1.5.2.1.1 Use of Read-Time Conditionals#

The following is added to clarify a question from RWK. Mail sent to him and Quinquevirate noting that this interpretation was made. -kmp 10-Apr-91

Use of #+ and #- does not automatically disqualify a program from being conforming. A program which uses #+ and #- is considered conforming if there is no set of features in which the program would not be conforming. Of course, conforming programs are not necessarily working programs. The following program is conforming:

(defun foo ()
  #+ACME (acme:initialize-something)
  (print 'hello-there))

However, this program might or might not work, depending on whether the presence of the feature ACME really implies that a function named acme:initialize-something is present in the environment. In effect, using #+ or #- in a conforming program means that the variable *features* becomes just one more piece of input data to that program. Like any other data coming into a program, the programmer is responsible for assuring that the program does not make unwarranted assumptions on the basis of input data.

1.5.2.2 Character Set for Portable Code#

Portable code is written using only standard characters.

1.6 Language Extensions#

Language Extensions

A language extension is any documented implementation-defined behavior of a defined name in this standard that varies from the behavior described in this standard, or a documented consequence of a situation that the standard specifies as undefined, unspecified, or extendable by the implementation. For example, if this standard says that “the results are unspecified,” an extension would be to specify the results.

Reviewer: Barmar: This contradicts previous definitions of conforming code. If the correct behavior of a program depends on the results provided by an extension, only implementations with the same extension will execute the program correctly. Note that such a program might be non-conforming. Also, if this standard says that “an implementation may be extended,” a conforming, but possibly non-portable, program can be written using an extension.

An implementation can have extensions, provided they do not alter the behavior of conforming code and provided they are not explicitly prohibited by this standard.

The term “extension” refers only to extensions available upon startup. An implementation is free to allow or prohibit redefinition of an extension.

The following list contains specific guidance to implementations concerning certain types of extensions.

1.7 Language Subsets#

Language Subsets

The language described in this standard contains no subsets, though subsets are not forbidden.

For a language to be considered a subset, it must have the property that any valid program in that language has equivalent semantics and will run directly (with no extralingual pre-processing, and no special compatibility packages) in any conforming implementation of the full language.

A language that conforms to this requirement shall be described as being a “subset of Common Lisp as specified by ANSI ⟪standard number⟫.” Per X3J13. Fixed typo: "beginsubsection" => "beginsection".

1.8 Deprecated Language Features#

Deprecated language features are not expected to appear in future Common Lisp standards, but are required to be implemented for conformance with this standard; see Section 1.5.1.1 (Required Language Features).

Conforming programs can use deprecated features; however, it is considered good programming style to avoid them. It is permissible for the compiler to produce style warnings about the use of such features at compile time, but there should be no such warnings at program execution time.

1.8.1 Deprecated Functions#

The functions in the next figure are deprecated.
assoc-if-notnsubst-if-notrequire
count-if-notnsubstitute-if-notset
delete-if-notposition-if-notsubst-if-not
find-if-notprovidesubstitute-if-not
gentemprassoc-if-not
member-if-notremove-if-not

Figure 1–2. Deprecated Functions

Restored PROVIDE,REQUIRE -kmp 7-Feb-92 Added GENTEMP -kmp 18-Aug-93

1.8.2 Deprecated Argument Conventions#

The ability to pass a numeric argument to gensym has been deprecated.

The :test-not argument to the functions in the next figure are deprecated.

adjoinnset-differencesearch
assocnset-exclusive-orset-difference
countnsublisset-exclusive-or
deletensubstsublis
delete-duplicatesnsubstitutesubsetp
findnunionsubst
intersectionpositionsubstitute
memberrassoctree-equal
mismatchremoveunion
nintersectionremove-duplicates

Figure 1–3. Functions with Deprecated :TEST-NOT Arguments

The use of the situation names compile, load, and eval in eval-when is deprecated.

1.8.3 Deprecated Variables#

The variable *modules* is deprecated.

1.8.4 Deprecated Reader Syntax#

The #S reader macro forces keyword names into the keyword package; see Section 2.4.8.13 (Sharpsign S). This feature is deprecated; in the future, keyword names will be taken in the package they are read in, so symbols that are actually in the keyword package should be used if that is what is desired.

1.9 Symbols in the COMMON-LISP Package#

978 symbols in ANSI package COMMON-LISP, generated by kmp@SONATA.Harlequin.COM on machine BALBOA running Genera 8.3, System 446.21 on 8/29/93 21:30:44, including these symbols added manually: (BOOLEAN ENSURE-DIRECTORIES-EXIST READ-SEQUENCE WRITE-SEQUENCE DEFINE-SYMBOL-MACRO). *** THIS FILE IS AUTOMATICALLY GENERATED. *** DO NOT MANUALLY EDIT, OR YOUR CHANGES MAY BE LOST! *** SEE "B:>ansi-cl>spec>tools>show-cl-symbols" FOR MORE INFO. *** --kmp

The figures on the next twelve pages contain a complete enumeration of the 978 external symbols in the common-lisp package.

&allow-other-keys*print-miser-width*
&aux*print-pprint-dispatch*
&body*print-pretty*
&environment*print-radix*
&key*print-readably*
&optional*print-right-margin*
&rest*query-io*
&whole*random-state*
**read-base*
***read-default-float-format*
****read-eval*
*break-on-signals**read-suppress*
*compile-file-pathname**readtable*
*compile-file-truename**standard-input*
*compile-print**standard-output*
*compile-verbose**terminal-io*
*debug-io**trace-output*
*debugger-hook*+
*default-pathname-defaults*++
*error-output*+++
*features*-
*gensym-counter*/
*load-pathname*//
*load-print*///
*load-truename*/=
*load-verbose*1+
*macroexpand-hook*1-
*modules*<
*package*<=
*print-array*=
*print-base*>
*print-case*>=
*print-circle*abort
*print-escape*abs
*print-gensym*acons
*print-length*acos
*print-level*acosh
*print-lines*add-method

Figure 1–4. Symbols in the COMMON-LISP package (part one of twelve).

adjoinatomboundp
adjust-arraybase-charbreak
adjustable-array-pbase-stringbroadcast-stream
allocate-instancebignumbroadcast-stream-streams
alpha-char-pbitbuilt-in-class
alphanumericpbit-andbutlast
andbit-andc1byte
appendbit-andc2byte-position
applybit-eqvbyte-size
aproposbit-iorcaaaar
apropos-listbit-nandcaaadr
arefbit-norcaaar
arithmetic-errorbit-notcaadar
arithmetic-error-operandsbit-orc1caaddr
arithmetic-error-operationbit-orc2caadr
arraybit-vectorcaar
array-dimensionbit-vector-pcadaar
array-dimension-limitbit-xorcadadr
array-dimensionsblockcadar
array-displacementboolecaddar
array-element-typeboole-1cadddr
array-has-fill-pointer-pboole-2caddr
array-in-bounds-pboole-andcadr
array-rankboole-andc1call-arguments-limit
array-rank-limitboole-andc2call-method
array-row-major-indexboole-c1call-next-method
array-total-sizeboole-c2car
array-total-size-limitboole-clrcase
arraypboole-eqvcatch
ashboole-iorccase
asinboole-nandcdaaar
asinhboole-norcdaadr
assertboole-orc1cdaar
assocboole-orc2cdadar
assoc-ifboole-setcdaddr
assoc-if-notboole-xorcdadr
atanbooleancdar
atanhboth-case-pcddaar

Figure 1–5. Symbols in the COMMON-LISP package (part two of twelve).

cddadrclear-inputcopy-tree
cddarclear-outputcos
cdddarclosecosh
cddddrclrhashcount
cdddrcode-charcount-if
cddrcoercecount-if-not
cdrcompilation-speedctypecase
ceilingcompiledebug
cell-errorcompile-filedecf
cell-error-namecompile-file-pathnamedeclaim
cerrorcompiled-functiondeclaration
change-classcompiled-function-pdeclare
charcompiler-macrodecode-float
char-codecompiler-macro-functiondecode-universal-time
char-code-limitcomplementdefclass
char-downcasecomplexdefconstant
char-equalcomplexpdefgeneric
char-greaterpcompute-applicable-methodsdefine-compiler-macro
char-intcompute-restartsdefine-condition
char-lesspconcatenatedefine-method-combination
char-nameconcatenated-streamdefine-modify-macro
char-not-equalconcatenated-stream-streamsdefine-setf-expander
char-not-greaterpconddefine-symbol-macro
char-not-lesspconditiondefmacro
char-upcaseconjugatedefmethod
char/=consdefpackage
char<conspdefparameter
char<=constantlydefsetf
char=constantpdefstruct
char>continuedeftype
char>=control-errordefun
charactercopy-alistdefvar
characterpcopy-listdelete
check-typecopy-pprint-dispatchdelete-duplicates
ciscopy-readtabledelete-file
classcopy-seqdelete-if
class-namecopy-structuredelete-if-not
class-ofcopy-symboldelete-package

Figure 1–6. Symbols in the COMMON-LISP package (part three of twelve).

denominatoreq
deposit-fieldeql
describeequal
describe-objectequalp
destructuring-binderror
digit-charetypecase
digit-char-peval
directoryeval-when
directory-namestringevenp
disassembleevery
division-by-zeroexp
doexport
do*expt
do-all-symbolsextended-char
do-external-symbolsfboundp
do-symbolsfceiling
documentationfdefinition
dolistffloor
dotimesfifth
double-floatfile-author
double-float-epsilonfile-error
double-float-negative-epsilonfile-error-pathname
dpbfile-length
dribblefile-namestring
dynamic-extentfile-position
ecasefile-stream
echo-streamfile-string-length
echo-stream-input-streamfile-write-date
echo-stream-output-streamfill
edfill-pointer
eighthfind
eltfind-all-symbols
encode-universal-timefind-class
end-of-filefind-if
endpfind-if-not
enough-namestringfind-method
ensure-directories-existfind-package
ensure-generic-functionfind-restart

Figure 1–7. Symbols in the COMMON-LISP package (part four of twelve).

find-symbolget-internal-run-time
finish-outputget-macro-character
firstget-output-stream-string
fixnumget-properties
fletget-setf-expansion
floatget-universal-time
float-digitsgetf
float-precisiongethash
float-radixgo
float-signgraphic-char-p
floating-point-inexacthandler-bind
floating-point-invalid-operationhandler-case
floating-point-overflowhash-table
floating-point-underflowhash-table-count
floatphash-table-p
floorhash-table-rehash-size
fmakunboundhash-table-rehash-threshold
force-outputhash-table-size
formathash-table-test
formatterhost-namestring
fourthidentity
fresh-lineif
froundignorable
ftruncateignore
ftypeignore-errors
funcallimagpart
functionimport
function-keywordsin-package
function-lambda-expressionincf
functionpinitialize-instance
gcdinline
generic-functioninput-stream-p
gensyminspect
gentempinteger
getinteger-decode-float
get-decoded-timeinteger-length
get-dispatch-macro-characterintegerp
get-internal-real-timeinteractive-stream-p

Figure 1–8. Symbols in the COMMON-LISP package (part five of twelve).

internlisp-implementation-type
internal-time-units-per-secondlisp-implementation-version
intersectionlist
invalid-method-errorlist*
invoke-debuggerlist-all-packages
invoke-restartlist-length
invoke-restart-interactivelylisten
isqrtlistp
keywordload
keywordpload-logical-pathname-translations
labelsload-time-value
lambdalocally
lambda-list-keywordslog
lambda-parameters-limitlogand
lastlogandc1
lcmlogandc2
ldblogbitp
ldb-testlogcount
ldifflogeqv
least-negative-double-floatlogical-pathname
least-negative-long-floatlogical-pathname-translations
least-negative-normalized-double-floatlogior
least-negative-normalized-long-floatlognand
least-negative-normalized-short-floatlognor
least-negative-normalized-single-floatlognot
least-negative-short-floatlogorc1
least-negative-single-floatlogorc2
least-positive-double-floatlogtest
least-positive-long-floatlogxor
least-positive-normalized-double-floatlong-float
least-positive-normalized-long-floatlong-float-epsilon
least-positive-normalized-short-floatlong-float-negative-epsilon
least-positive-normalized-single-floatlong-site-name
least-positive-short-floatloop
least-positive-single-floatloop-finish
lengthlower-case-p
letmachine-instance
let*machine-type

Figure 1–9. Symbols in the COMMON-LISP package (part six of twelve).

machine-versionmask-field
macro-functionmax
macroexpandmember
macroexpand-1member-if
macroletmember-if-not
make-arraymerge
make-broadcast-streammerge-pathnames
make-concatenated-streammethod
make-conditionmethod-combination
make-dispatch-macro-charactermethod-combination-error
make-echo-streammethod-qualifiers
make-hash-tablemin
make-instanceminusp
make-instances-obsoletemismatch
make-listmod
make-load-formmost-negative-double-float
make-load-form-saving-slotsmost-negative-fixnum
make-methodmost-negative-long-float
make-packagemost-negative-short-float
make-pathnamemost-negative-single-float
make-random-statemost-positive-double-float
make-sequencemost-positive-fixnum
make-stringmost-positive-long-float
make-string-input-streammost-positive-short-float
make-string-output-streammost-positive-single-float
make-symbolmuffle-warning
make-synonym-streammultiple-value-bind
make-two-way-streammultiple-value-call
makunboundmultiple-value-list
mapmultiple-value-prog1
map-intomultiple-value-setq
mapcmultiple-values-limit
mapcanname-char
mapcarnamestring
mapconnbutlast
maphashnconc
maplnext-method-p
maplistnil

Figure 1–10. Symbols in the COMMON-LISP package (part seven of twelve).

nintersectionpackage-error
ninthpackage-error-package
no-applicable-methodpackage-name
no-next-methodpackage-nicknames
notpackage-shadowing-symbols
notanypackage-use-list
noteverypackage-used-by-list
notinlinepackagep
nreconcpairlis
nreverseparse-error
nset-differenceparse-integer
nset-exclusive-orparse-namestring
nstring-capitalizepathname
nstring-downcasepathname-device
nstring-upcasepathname-directory
nsublispathname-host
nsubstpathname-match-p
nsubst-ifpathname-name
nsubst-if-notpathname-type
nsubstitutepathname-version
nsubstitute-ifpathnamep
nsubstitute-if-notpeek-char
nthphase
nth-valuepi
nthcdrplusp
nullpop
numberposition
numberpposition-if
numeratorposition-if-not
nunionpprint
oddppprint-dispatch
openpprint-exit-if-list-exhausted
open-stream-ppprint-fill
optimizepprint-indent
orpprint-linear
otherwisepprint-logical-block
output-stream-ppprint-newline
packagepprint-pop

Figure 1–11. Symbols in the COMMON-LISP package (part eight of twelve).

pprint-tabread-char
pprint-tabularread-char-no-hang
prin1read-delimited-list
prin1-to-stringread-from-string
princread-line
princ-to-stringread-preserving-whitespace
printread-sequence
print-not-readablereader-error
print-not-readable-objectreadtable
print-objectreadtable-case
print-unreadable-objectreadtablep
probe-filereal
proclaimrealp
progrealpart
prog*reduce
prog1reinitialize-instance
prog2rem
prognremf
program-errorremhash
progvremove
provideremove-duplicates
psetfremove-if
psetqremove-if-not
pushremove-method
pushnewremprop
quoterename-file
randomrename-package
random-statereplace
random-state-prequire
rassocrest
rassoc-ifrestart
rassoc-if-notrestart-bind
ratiorestart-case
rationalrestart-name
rationalizereturn
rationalpreturn-from
readrevappend
read-bytereverse

Figure 1–12. Symbols in the COMMON-LISP package (part nine of twelve).

roomsimple-bit-vector
rotatefsimple-bit-vector-p
roundsimple-condition
row-major-arefsimple-condition-format-arguments
rplacasimple-condition-format-control
rplacdsimple-error
safetysimple-string
satisfiessimple-string-p
sbitsimple-type-error
scale-floatsimple-vector
scharsimple-vector-p
searchsimple-warning
secondsin
sequencesingle-float
serious-conditionsingle-float-epsilon
setsingle-float-negative-epsilon
set-differencesinh
set-dispatch-macro-charactersixth
set-exclusive-orsleep
set-macro-characterslot-boundp
set-pprint-dispatchslot-exists-p
set-syntax-from-charslot-makunbound
setfslot-missing
setqslot-unbound
seventhslot-value
shadowsoftware-type
shadowing-importsoftware-version
shared-initializesome
shiftfsort
short-floatspace
short-float-epsilonspecial
short-float-negative-epsilonspecial-operator-p
short-site-namespeed
signalsqrt
signed-bytestable-sort
signumstandard
simple-arraystandard-char
simple-base-stringstandard-char-p

Figure 1–13. Symbols in the COMMON-LISP package (part ten of twelve).

standard-classsublis
standard-generic-functionsubseq
standard-methodsubsetp
standard-objectsubst
stepsubst-if
storage-conditionsubst-if-not
store-valuesubstitute
streamsubstitute-if
stream-element-typesubstitute-if-not
stream-errorsubtypep
stream-error-streamsvref
stream-external-formatsxhash
streampsymbol
stringsymbol-function
string-capitalizesymbol-macrolet
string-downcasesymbol-name
string-equalsymbol-package
string-greaterpsymbol-plist
string-left-trimsymbol-value
string-lesspsymbolp
string-not-equalsynonym-stream
string-not-greaterpsynonym-stream-symbol
string-not-lesspt
string-right-trimtagbody
string-streamtailp
string-trimtan
string-upcasetanh
string/=tenth
string<terpri
string<=the
string=third
string>throw
string>=time
stringptrace
structuretranslate-logical-pathname
structure-classtranslate-pathname
structure-objecttree-equal
style-warningtruename

Figure 1–14. Symbols in the COMMON-LISP package (part eleven of twelve).

truncatevalues-list
two-way-streamvariable
two-way-stream-input-streamvector
two-way-stream-output-streamvector-pop
typevector-push
type-errorvector-push-extend
type-error-datumvectorp
type-error-expected-typewarn
type-ofwarning
typecasewhen
typepwild-pathname-p
unbound-slotwith-accessors
unbound-slot-instancewith-compilation-unit
unbound-variablewith-condition-restarts
undefined-functionwith-hash-table-iterator
unexportwith-input-from-string
uninternwith-open-file
unionwith-open-stream
unlesswith-output-to-string
unread-charwith-package-iterator
unsigned-bytewith-simple-restart
untracewith-slots
unuse-packagewith-standard-io-syntax
unwind-protectwrite
update-instance-for-different-classwrite-byte
update-instance-for-redefined-classwrite-char
upgraded-array-element-typewrite-line
upgraded-complex-part-typewrite-sequence
upper-case-pwrite-string
use-packagewrite-to-string
use-valuey-or-n-p
user-homedir-pathnameyes-or-no-p
valueszerop

Figure 1–15. Symbols in the COMMON-LISP package (part twelve of twelve).