Put at least one blank line before and after top-level expressions. This lets users get help while running your program without having to resort to the source code or printed documentation. Accessing the nth element of a vector is faster than finding the nth element of a list, since the latter requires pointer chasing while the former requires simple addition. Vectors also take up less space than lists. This makes it clear that you're using an alist.
Hash tables are often more efficient.
They are often faster, take up less space, and easier to use. Do not use global variables in lieu of parameter passing. When a called function needs to affect the current or future operation of the caller, but it doesn't make sense to accomplish this by returning multiple values. To provide hooks into the mechanisms of the program. Parameters which, when their value is changed, represent a major change to the program.