Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save chrisvest/953857 to your computer and use it in GitHub Desktop.
Save chrisvest/953857 to your computer and use it in GitHub Desktop.
;; chrisvest's solution to http://4clojure.com/problem/63
(fn [f coll]
(reduce (fn [m x]
(let [k (f x)]
(update-in m [k] #(conj (or % []) x))))
{} coll))
@chrisvest
Copy link
Author

#(F f, Seq coll) (
  reduce(
    #(Map m, Object x) {
      Object k = f.call(x);
      updateIn(m, list(k), #(y) (conj(coalesce(y, list()), x)));
      return m;
    },
    new HashMap(),
    coll)
)

@chrisvest
Copy link
Author

#(F f, Seq coll) {
  reduce(
    #(Map m, Object x) {
      Object k = f.call(x);
      updateIn(m, list(k), #(y) {conj(coalesce(y, list()), x)});
      return m;
    },
    new HashMap(),
    coll)
}

@chrisvest
Copy link
Author

{F f, Seq coll ->
  reduce(
    {Map m, Object x ->
      Object k = f.call(x);
      updateIn(m, list(k), {y -> conj(coalesce(y, list()), x)});
      return m;
    },
    new HashMap(),
    coll)
}

@chrisvest
Copy link
Author

#{F f, Seq coll ->
  reduce(
    #{Map m, Object x ->
      Object k = f.call(x);
      updateIn(m, list(k), #{y -> conj(coalesce(y, list()), x)});
      return m;
    },
    new HashMap(),
    coll)
}

@chrisvest
Copy link
Author

(F f, Seq coll) -> {
  reduce(
    (Map m, Object x) -> {
      Object k = f.call(x);
      updateIn(m, list(k), (y) -> {conj(coalesce(y, list()), x)});
      return m;
    },
    new HashMap(),
    coll)
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment