A cg_let(<alist>, <code>) macro could expand to <code>,
wrapped with a number of m4_pushdef/m4_popdef's,
taking their definitions from <alist>.
A three-arguments form could accept a prefix for the macros,
so that an arbitrary alist can be used without polluting the namespace.