Sometimes though the constructors for the Lisp data classes have identical arguments. Since interface functions are declared inline, there is no runtime overhead incurred by their use. Many operations in Lisp are illegal. Inheritance can be used to implicitly perform type-checking of arguments. The base class provides virtual functions whose default behavior is to invoke an error handler.
Derived classes override the virtual methods when appropriate.
When baz is assigned the cdr of itself, the car, 'a', is left unreferenced. The Lisp garbage collector will recognize this and reclaim the memory so it can be reused. Later we will examine how Lily achieves automatic garbage collection. LObject-oriented software usually involves manipulation of objects directly. The corresponding yacc and lex programs in UNIX can be used as well, but require a little hacking since they don't generate ANSI C as Bison and Flex do.