1.Symbols定义
Symbols are used for their object identity to name various entities in Common Lisp, including (but not limited to) linguistic entities such as variables and functions.
2.内置Symbol
intern symbol -- An interned symbol is uniquely identifiable by its name from any package in which it is accessible.
3.字符串转换成symbol
;;;
;;; 说明: 代码右边 => "..." 表示每行代码的输出。
;;;
(setf symbol-string "sym") => "sym"
(setf symbol-object (intern symbol-string)) => sym
(symbolp symbol-object) => t
(setf (get symbol-object 'symbol-name) "sym") => "sym"
(setf (get symbol-object 'symbol-value) "sym") => "sym"
4.symbol的结构
每个symbol有以下主要的结构:
;name ---> "FOO"
;package ---> in some package
;value ---> 27
;function ---> #<function>
;plist ---> (color red)
from Paul Graham's《ANSI Common Lisp》. P135
5.fboudp判断一个symbol是否为函数名
(fboundp 'acs-main-loop) => t ;;; acs-main-loop为一个函数名
(fboundp 'asymbol) => nil ;;; asymbol 只是一个符号
6.判断一个symbol是否为类名
(find-class 'patc-pattern nil) => t ;;;patc-pattern是一个类名
(find-class 'patx-pattern nil) => nil ;;;patx-pattern不是一个类
这里find-class的几个参数要注意:
Syntax:(setf (find-class symbol &optional errorp environment) new-class)
当 errorp设置为nil时,不会抛出type error异常。