- symbols
- symbol without a colon is an unqualified name
- symbol with one colon can only refer to exported (public) symbols
- symbol with double-colon can refer to unexported symbols
- keyword symbols start with colon and are interned in
KEYWORD
package and automatically exported - uninterned symbols are written with a leading
#:
. Every time the reader reads a name starting with #:
, it creates a new symbol
- accessible: all the symbols that can be found in a given package with
find-symbol
(= symbols that can be referred to with unqualified names when the package is current) - present: symbol is contained in package’s name-to-symbol table
- The package in which a symbol is first interned (by the reader) is home package
- A package inherits symbols from other packages by using the other packages. Only external symbols are inherited. A symbol is made external by exporting (also makes it accessible via single-colon name).
- For each name, there can only be one symbol max. A symbol can be made shadowing which makes it shadow other symbols with the same name. Each package maintains a list of shadowing symbols.
- A symbol can be imported by adding it to the name-to-symbol table
- A symbol can be uninterned from a package—removed from its name-to-symbol and shadowing tables
- a symbol that is not present in any package is called an uninterned symbol, and can no longer be read by the reader
- Package system in common lisp is only exporting symbols, not functions or variables.
(defpackage :package.name
(:use :common-lisp :package2)
(:export
:symbol1
:symbol2)
(:import-from :other.package.name :symbol3 :symbol4)
(:shadow :symbol5)
(:shadowing-import-from :package-name :symbol-name))