I thought the execution was fine! I only objected to the direction :p Only simplification I could see was to turn:
(if args `(,f ,@(join args (list x))) `(,f ,x)))
`(,f ,@args ,x)
Also, and I'm not sure, but I have a sneaking suspicion I might need to w/uniq those input args. I just didn't get that far into arcs' internals last night.
-----