Common Lisp Extensions. Node: Generalized Variables

PREV Assignment UP Control Structure NEXT Variable Bindings

5.2: Generalized Variables

A ``generalized variable'' or ``place form'' is one of the many places in Lisp memory where values can be stored. The simplest place form is a regular Lisp variable. But the cars and cdrs of lists, elements of arrays, properties of symbols, and many other locations are also places where Lisp values are stored.

The setf form is like setq, except that it accepts arbitrary place forms on the left side rather than just symbols. For example, (setf (car a) b) sets the car of a to b, doing the same operation as (setcar a b) but without having to remember two separate functions for setting and accessing every type of place.

Generalized variables are analogous to ``lvalues'' in the C language, where `x = a[i]' gets an element from an array and `a[i] = x' stores an element using the same notation. Just as certain forms like a[i] can be lvalues in C, there is a set of forms that can be generalized variables in Lisp.

  • Basic Setf `setf' and place forms
  • Modify Macros `incf', `push', `rotatef', `letf', `callf', etc.
  • Customizing Setf `define-modify-macro', `defsetf', `define-setf-method'
  • PREV Assignment UP Control Structure NEXT Variable Bindings