Tagged as challenge

Written on 2018-02-06

Most Lisps have combinations of `car`

and `cdr`

built in, usually up
to four levels deep, e.g., `caaddr`

and `cdaddr`

are built-ins
referring to

`(`*lambda* (x) (car (car (cdr (cdr x)))))
; and
(*lambda* (x) (cdr (car (cdr (cdr x)))))

respectively. Implement a macro `(generate-cxr n)`

which generates the
definitions of all `car`

/`cdr`

combinations up to `n`

times.

If your language doesn't support macros or dynamic definitions, write
a function of the same name which produces a list of all `car`

/`cdr`

combinations as anonymous functions.

**Extra Credit**: Implement this as efficiently as possible, using the
least amount of space.