( (defun filtermap_fun (process remaining init) (if remaining (assign next (a process (list (f remaining))) (if next (c next (filtermap process (r remaining) init)) (filtermap process (r remaining) init) ) ) init ) ) (defmac filtermap (process remaining . maybe_init) (if maybe_init (qq (filtermap_fun (unquote process) (unquote remaining) (unquote (f maybe_init)))) (qq (filtermap_fun (unquote process) (unquote remaining) ())) ) ) )