(ns clojure-sql.util (:require [clojure.set :as set])) (defn funcall [f & args] (apply f args)) (defn flip [f] (fn [& args] (apply f (reverse args)))) (defn flip-map [m] (->> m (map (comp vec reverse)) (into {}))) (defn map-kv [f & maps] (let [all-keys (into #{} (mapcat keys maps))] (->> all-keys (map (fn [key] (apply f key (map #(get % key) maps)))) (into {})))) (defn map-vals [f & maps] (apply map-kv (fn [k & vs] [k (apply f vs)]) maps))