8.2 属性列表 (Property Lists)

在 Common Lisp 里,每个符号都有一个属性列表(property-list)或称为 plist 。函数 get 接受符号及任何类型的键值,然后返回在符号的属性列表中,与键值相关的数值:

  1. > (get 'alizarin 'color)
  2. NIL

它使用 eql 来比较各个键。若某个特定的属性没有找到时, get 返回 nil

要将值与键关联起来时,你可以使用 setfget :

  1. > (setf (get 'alizarin 'color) 'red)
  2. RED
  3. > (get 'alizarin 'color)
  4. RED

现在符号 alizarincolor 属性是 red

../_images/Figure-8.1.png

图 8.1 符号的结构

  1. > (setf (get 'alizarin 'transparency) 'high)
  2. HIGH
  3. > (symbol-plist 'alizarin)
  4. (TRANSPARENCY HIGH COLOR RED)

注意,属性列表不以关联列表(assoc-lists)的形式表示,虽然用起来感觉是一样的。

在 Common Lisp 里,属性列表用得不多。他们大部分被哈希表取代了(4.8 小节)。