The
SETF macro sets a generalized/
field to some value.
Before it existed, there was a
SET function a long time ago, before lexical scope, which sets a symbol value cell's (those values are typically used together with dynamic scope), this symbol is supposed to be contained
within the first parameter(upon its evaluation).
SET wouldn't make sense for local lexically scoped variables, but the most common usage was to quote the symbol, in the sense
(set 'sym new-val), which led to the appearance of the
setq function special form. Why is it a special form? Since now it can work with lexically scoped variables and also has a slightly different order-of-execution for instructions (allows setting multiple variables), when used on a dynamicly scoped variable, it will work like it used to work in the distant past: the set quoted, while when used on a lexically scoped variable, it will work as a regular assignment operator.
I think
SETF appeared sometime after both of those forms, and it's author was someone who still posts on c.l.l, so the origin isn't that uncertain, but doing this sort of archeology isn't that easy either
>>4.
I do believe someone actually wrote a document which documented how the assignment forms evolved over time, but I'm not sure I can find it...