Alternative, alist-based representation for trees in lisp: ((car . define) (caadr . flatten->alist) (cadadr . lis) (caddadr . #!optional) (caadddadr . idx) (caadadddadr . quote) (caadadadddadr . #\r) (cdadadadddadr) (cddadadddadr) (cddadddadr) (cddddadr) (caaddr . if) (caadaddr . pair?) (cadadaddr . lis) (cddadaddr) (caaddaddr . append) (caadaddaddr . flatten->alist) (caadadaddaddr . car) (cadadadaddaddr . lis) (cddadadaddaddr) (caaddadaddaddr . cons) (cadaddadaddaddr . #\a) (caddaddadaddaddr . idx) (cdddaddadaddaddr) (cdddadaddaddr) (caaddaddaddr . flatten->alist) (caadaddaddaddr . cdr) (cadadaddaddaddr . lis) (cddadaddaddaddr) (caaddaddaddaddr . cons) (cadaddaddaddaddr . #\d) (caddaddaddaddaddr . idx) (cdddaddaddaddaddr) (cdddaddaddaddr) (cdddaddaddr) (caadddaddr . list) (caadadddaddr . cons) (caadadadddaddr . string->symbol) (caadadadadddaddr . list->string) (caadadadadadddaddr . cons) (cadadadadadadddaddr . #\c) (caddadadadadadddaddr . idx) (cdddadadadadadddaddr) (cddadadadadddaddr) (cddadadadddaddr) (caddadadddaddr . lis) (cdddadadddaddr) (cddadddaddr) (cddddaddr) (cdddr)) Advantages: * Like alists, purely functional; completely eliminates need for set-car!. * Like alists, fast (constant-time) alteration at any depth within the tree. * Simple textual representation -- fewer nested parentheses. * Highly flexible representation for source: e.g., indents automatically; safely allows sorting lines. Disadvantages: * None apparent.