User Tools

Site Tools


ch2_3_pack_sym

This is an old revision of the document!


Package and symbol operations

Functions that deal with symbols alone or in the context of packages. Here we just describe the functions in terms of input and output. Further explanation will be in different section.

SYMBOL-VALUE and SYMBOL-FUNCTION

Return the symbol's value resp. function object bound in global context. Both accept one argument that must be symbol.

>(symbol-value 'pi)       ; PI is global variable
3.14159
 
>(symbol-function 'cons)  ; CONS is standard function
#<function CONS>

SYMBOL-NAME

Expects one argument that must be symbol. Returns the symbol's name as string.

>(symbol-name 'pi)       ; PI is global variable
"PI"

FIND-SYMBOL

Finds symbol by name in a package. Expects one string argument - the symbol name - and optional argument which is a package designator. Package designator can be string or symbol or package object itself. If the package name is not supplied, dynamic current package is used. Returns the symbol if it is found, otherwise NIL. If it is found, also prints the symbol's relation to the package. Note that in Common LISP, this function returns two values, the second is a keyword which characterizes the relation. LabLISP function prints the same keyword, but it is not output of the function, because LabLisp does not support multiple values yet.

>(find-symbol "PI")            ; USER package will be searched
:INHERITED                     ; it is inherited from base package LABLISP
PI
 
>(find-symbol "PI" "LABLISP")  ; now we search in LABLISP package
:EXTERNAL                      ; there the symbol is external
PI

It is prefered to call the packages by string names, when we explicitly know it. It is also possible to use a symbol, with the name same as the name of the package. But it is important to know that the package is not bound to the symbol.

(find-symbol "PI" 'user)      ; USER package will be searched as above

Here we created new symbol USER and interned in “USER” package. Using symbols as package designators might lead to confussion as to where the symbol is actually interned (see below INTERN)

(find-symbol "PI" *PACKAGE*)  ; *PACKAGE* is global variable 

Here the symbol *PACKAGE* is evaluated to the dynamic current package. So the last example is identical to call the function without the optional package argument.

MAKE-SYMBOL

Creates new symbol with given name, outside of any package (homeless). Expects one string argument.

>(make-symbol "BLA")       
#:BLA                      ; the prefix means that the symbol is homeless 

The example above creates the symbol, it is returned, but then it is discrded, because it has no owner and no binding.

INTERN

SYMBOL-PACKAGE

PACKAGE-NAME

FIND-PACKAGE, MAKE-PACKAGE, IN-PACKAGE, LIST-ALL-PACKAGES, USE-PACKAGE, UNUSE-PACKAGE

IMPORT, EXPORT, UNINTERN, UNEXPORT

PACKAGE-USE-LIST. PACKAGE-USED-BY-LIST, PACKAGE-INTERNAL-SYMBOLS, PACKAGE-EXTERNAL-SYMBOLS,

ch2_3_pack_sym.1619079690.txt.gz · Last modified: 2021/04/22 02:21 by admin

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki