ANSI Common Lisp 学习笔记 —— 第八章 符号
8.1 符号名 (Symbol Names)
使用 symbol-name函数 可获得符号的名字:
> (symbol-name 'abc)
"ABC"
lisp 默认不区分大小写,打印出来的名字都是大写字母。
> (eql 'abc 'ABC)
T
> (CaR '(a b c))
A
想区分大小写,可使用|***|形式:
> (symbol-name '|a b C|)
"a b C"
要包含符号|的话:
> (symbol-name '|a \| b|)
"a | b"
其他示例:
> (list '|Lisp 1.5| '|| '|abc| '|ABC|)
(|Lisp 1.5| || |abc| ABC)
8.2 属性列表 (Property Lists)
符号可以关联属性列表(property-list、plist),使用 get 返回属性列表中对应的值:
> (get 'a 'color) NIL > (setf (get 'a 'color)) RED > (get 'a 'color) RED
在示例中,未定义color属性时,则返回NIL。
> (setf (get 'a 'transparency) 'high) HIGH > (symbol-plist 'a) (TRANSPARENCY HIGH COLOR RED)
lisp中属性列表用得不多,基本被哈希表取代了。
8.3 符号很不简单 (symbols Are Big)
符号是一个对象,结构大概跟defstruct定义的差不多:
(
name: "FOO"
package: ...
value: 27
function: #<function>
plist: (color red)
)
8.4 创建符号(Creating Symbols)
符号大都包含在包中,包就是符号表(symbol-tabls),用来映射符号-name。
使用intern函数创建符号:
> (intern "RANDOM-SYMBOL") RANDOM-SYMBOL NIL
示例中,intern函数返回NIL,说明RANDOM-SYMBOL符号原先不存在,现在通过intern函数创建了。
示例中未指定包,lisp就会用默认包来关联符号,这个默认包通常是common-lisp-user。
8.5 多重包 (Multiple Packages)

浙公网安备 33010602011771号