The ECL interpreter uses two A-lists (Association lists) to represent lexical environments.
One for variable bindings
One for local function/macro/tag/block bindings
When a function closure is created, the current two A-lists are saved in the closure along with the lambda expression. Later, when the closure is invoked, the saved A-lists are used to recover the lexical environment.