Clean args as early as possible
Use pop instead of (setq x (cdr x))