A property list is like an association list, but instead of each association being a pair, the associations are "written out" as alternating keys and values.
Assocition list: '((a . 1) (b . 2) (c . 3))
Property list: (a 1 b 2 c 3)
Traditionally some Lisp dialects can store a property list for each symbol in the Lisp system. The following Scheme implementations can do it:
Scheme | Get property | Put property | Remove property | Get p-list |
---|---|---|---|---|
Chicken | get |
put or (setter get) |
remprop! |
symbol-plist |
Chez Scheme | getprop |
putprop |
remprop |
property-list (returns copy) |
Ikarus | getprop |
putprop |
remprop |
property-list (returns copy) |
Larceny | getprop |
putprop |
remprop |
(none) |
Bigloo | getprop |
putprop ! |
remprop! |
symbol-plist |
Guile | symbol-property |
set-symbol-property! |
symbol-property-remove! |
(none) |
Common Lisp | get |
(setf (get key) val) |
remprop |
symbol-plist |
Emacs Lisp | get |
put |
cl-remprop |
symbol-plist |
Chicken also provides:
Kawa's underlying implementation provides property lists for its Elisp implementation, but they aren't directly exposed to Scheme except through the Java FFI.
Common Lisp has functions that can manipulate any given plist, not only a symbol plist: