&gt; 1) It sure is awkward to represent struct fields 1 2 3 as (cdr struct), (cadr struct), (caddr), ...<p>The Right Way to do this is with a D-List, or Detached List, analogous to an A-List or a P-List.  An A-List, if you recall, is a list of key-value conses.  A P-List is a list of alternating key-value pairs.  A D-list is a cons of a list of keys and a list of values, i.e.:<p>((key1 key2 ...) val1 val2 ...)<p>D-lists are superior to A-Lists and P-Lists because:<p>1.  The key list structure can be re-used<p>2.  D-ASSOC only requires one traversal down the key list, after which the index of the key can be cached.  This is usually the first step in writing a &quot;fast&quot; interpreter, but if you use A-Lists or P-Lists then you have to change data structures.  If you use a D-List you already have the optimized structure in the CDR of the D-List pair.<p>3.  Going from optimized interpreter to full compiler is a simple matter of replacing the linked list of values with a vector of values.<p>It&#x27;s a shame that D-Lists are very rarely taught.