intern (original) (raw)
ANSI Common Lisp 11 Packages
11.2 Dictionary of Packages
Syntax:
intern string &optional package symbol, status
Arguments and Values:
string - a string.
package - a package designator. The default is the current package.
symbol - a symbol.
status - one of :inherited, :external, :internal, or nil.
Description:
intern enters a symbol named string into package. If a symbol whose name is the same as _string_is already accessible in package, it is returned. If no such symbol is accessible in package, a new symbol with the given name is created and entered into package as an internal symbol, or as an external symbol if the package is the keyword package; package becomes the home package of the created symbol.
The first value returned by intern, symbol, is the symbol that was found or created. The meaning of the secondary value, status, is as follows:
- :internal
The symbol was found and is_present_ in package as an internal symbol. - :external
The symbol was found and is_present_ as an external symbol. - :inherited
The symbol was found and is inherited via use-package(which implies that the symbol is internal). - nil
No pre-existing symbol was found, so one was created.
It is implementation-dependent whether the _stringthat becomes the new symbol's name is the given_string or a copy of it. Once a stringhas been given as the string argument tointern in this situation where a new symbol is created, the consequences are undefined if a subsequent attempt is made to alter that string.
Examples:
(in-package "COMMON-LISP-USER") #<PACKAGE "COMMON-LISP-USER">
(intern "Never-Before")
|Never-Before|, NIL
(intern "Never-Before")
|Never-Before|, :INTERNAL
(intern "NEVER-BEFORE" "KEYWORD")
:NEVER-BEFORE, NIL
(intern "NEVER-BEFORE" "KEYWORD")
:NEVER-BEFORE, :EXTERNAL
See Also:
find-symbol,read,symbol,unintern, Section 2.3.4 Symbols as Tokens
Notes:
intern does not need to do any name conflict checking because it never creates a new _symbol_if there is already an accessible symbol with the name given.
Allegro CL Implementation Details:
Allegro CL allows symbols as well as strings as the first argument.. See cl:intern implementationin implementation.html.