You may have guessed it: The whole set_pers_context business in the 
first part of this mini-series
was actually a red herring. I promise I won't mislead you this time -
and I'll even reveal the reason why the series is titled "And...Action!"

No, we don't need contrived constructs like 
 (print extrude) to show that
extrude is somehow... different from all the other kids. All we need is a simple experiment.
First, enter 
extrude in 
CoCreate Modeling's user input line: The 
Extrude dialog 
unfolds in all its glory, and patiently awaits your input.
Now try the same with 
print: All you get is an uncooperative
"Lisp error: The variable PRINT is unbound". How disappointing.
But then, the behavior for 
print is expected, considering the usual
evaluation rules for Common Lisp, 
particularly for symbols. As a quick reminder:
-  If the symbol refers to a variable, the value of the variable is returned.
-  If the symbol refers to a function and occurs in the first position of a list,
     the function is executed.
extrude & friends belong to the symbol jet-set in CoCreate Modeling. For them, 
the usual evaluation rules for functions don't apply (pun intended).
Using 
symbol properties
as markers, they carry a backstage pass and can party anywhere.
For members of the 
extrude posse, it doesn't really matter if you use them as an 
atom, in the first position of a list, or anywhere else: In all cases, the function which 
they refer to will be executed right away - by virtue of an extension to the evaluator 
which is unique to CoCreate Modeling's implementation of Common Lisp.
You can create such upper-class symbols yourself - using a macro called 
defaction.
This macro is also unique to CoCreate Modeling. Functions 
defined by 
defaction are called, you guessed it, 
action routines.
But why, you ask, would I want such a feature, particularly if I know that it breaks with 
established conventions for Lisp evaluation?
Well, precisely 
because this feature breaks with the established rules.
To be continued...
to top