1. (defn foo
  2. [x y & args]
  3. (loop [results {}
  4. a (first args)
  5. b (second args)
  6. more (drop 2 args)]
  7. (if-not (and a b)
  8. results
  9. (recur (assoc results (x a) (y b))
  10. (first more)
  11. (second more)
  12. (drop 2 more)))))

user=> (foo identity inc :a 1 :b 2 :c 3)

{:c 4, :b 3, :a 2}