I never use is.recursive/is.atomic because the definition they use for
an object to be recursive doesn't usually coincide with what I am
interested in. (If you want to know what that definition is you can
look at the source code, coerce.c:1790.) In computing on the language I
would want one notion where pretty much only calls are recursive in
the sense of having componets that need to be recursed into (you can
see how that is handled in the byte code compiler which is in the
sources as a noweb file). At the internal level, for example in the
GC, _every_ object is recursive in the sence of needing to be checked
for pointers to other objects, because of the attribute field.