Skip to content

Instantly share code, notes, and snippets.

@rhz
Created November 8, 2010 21:21
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 rhz/668294 to your computer and use it in GitHub Desktop.
Save rhz/668294 to your computer and use it in GitHub Desktop.
(defn get-complexes
"Returns a seq with the ids of the complexes in expr (which is a
map from id (Integer) to Kappa agent)."
[expr]
(if (:complexes (meta expr)) (:complexes (meta expr))
(let [get-complex (partial complex expr)]
(loop [remaining expr
last-complex #{}
groups (transient [])]
(let [remaining (remove (comp last-complex key) remaining)]
(if (empty? remaining)
(persistent! groups)
(let [c (get-complex (first remaining))]
(recur (rest remaining) c (conj! groups c)))))))))
(defn get-complexes
"Returns a seq with the ids of the complexes in expr."
[expr]
(if (:complexes (meta expr)) (:complexes (meta expr))
(let [get-complex (partial complex expr)
step (fn step [remaining]
(if (empty? remaining)
nil
(let [c (get-complex (first remaining))]
(cons c (lazy-seq
(step (remove (comp c key) remaining)))))))]
(step expr))))
No message.
[Thrown class java.lang.StackOverflowError]
Restarts:
0: [QUIT] Quit to the SLIME top level
Backtrace:
0: clojure.lang.PersistentHashMap$ArrayNode$Seq.create(PersistentHashMap.java:448)
1: clojure.lang.PersistentHashMap$ArrayNode$Seq.next(PersistentHashMap.java:471)
2: clojure.lang.PersistentHashMap$ArrayNode$Seq.next(PersistentHashMap.java:471)
3: clojure.lang.ASeq.more(ASeq.java:116)
4: clojure.lang.RT.more(RT.java:569)
5: clojure.core$rest.invoke(core.clj:69)
6: clojure.core$filter$fn__3714.invoke(core.clj:2139)
7: clojure.lang.LazySeq.sval(LazySeq.java:42)
8: clojure.lang.LazySeq.seq(LazySeq.java:56)
9: clojure.lang.RT.seq(RT.java:450)
10: clojure.core$seq.invoke(core.clj:122)
11: clojure.core$filter$fn__3714.invoke(core.clj:2130)
12: clojure.lang.LazySeq.sval(LazySeq.java:42)
13: clojure.lang.LazySeq.seq(LazySeq.java:56)
14: clojure.lang.RT.seq(RT.java:450)
15: clojure.core$seq.invoke(core.clj:122)
16: clojure.core$filter$fn__3714.invoke(core.clj:2130)
17: clojure.lang.LazySeq.sval(LazySeq.java:42)
18: clojure.lang.LazySeq.seq(LazySeq.java:56)
19: clojure.lang.RT.seq(RT.java:450)
20: clojure.core$seq.invoke(core.clj:122)
21: clojure.core$filter$fn__3714.invoke(core.clj:2130)
22: clojure.lang.LazySeq.sval(LazySeq.java:42)
23: clojure.lang.LazySeq.seq(LazySeq.java:56)
24: clojure.lang.RT.seq(RT.java:450)
25: clojure.core$seq.invoke(core.clj:122)
26: clojure.core$filter$fn__3714.invoke(core.clj:2130)
27: clojure.lang.LazySeq.sval(LazySeq.java:42)
28: clojure.lang.LazySeq.seq(LazySeq.java:56)
29: clojure.lang.RT.seq(RT.java:450)
30: clojure.core$seq.invoke(core.clj:122)
31: clojure.core$filter$fn__3714.invoke(core.clj:2130)
32: clojure.lang.LazySeq.sval(LazySeq.java:42)
33: clojure.lang.LazySeq.seq(LazySeq.java:56)
34: clojure.lang.RT.seq(RT.java:450)
35: clojure.core$seq.invoke(core.clj:122)
36: clojure.core$filter$fn__3714.invoke(core.clj:2130)
37: clojure.lang.LazySeq.sval(LazySeq.java:42)
38: clojure.lang.LazySeq.seq(LazySeq.java:56)
39: clojure.lang.RT.seq(RT.java:450)
40: clojure.core$seq.invoke(core.clj:122)
41: clojure.core$filter$fn__3714.invoke(core.clj:2130)
42: clojure.lang.LazySeq.sval(LazySeq.java:42)
43: clojure.lang.LazySeq.seq(LazySeq.java:56)
44: clojure.lang.RT.seq(RT.java:450)
45: clojure.core$seq.invoke(core.clj:122)
46: clojure.core$filter$fn__3714.invoke(core.clj:2130)
47: clojure.lang.LazySeq.sval(LazySeq.java:42)
48: clojure.lang.LazySeq.seq(LazySeq.java:56)
49: clojure.lang.RT.seq(RT.java:450)
50: clojure.core$seq.invoke(core.clj:122)
...
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment