Created
April 27, 2011 19:34
-
-
Save sritchie/945001 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(defn sparse-vector | |
"Takes in a sequence of 2-tuples of the form `<idx, val>` and | |
generates a sparse vector with each `val` inserted at its | |
corresponding `idx`. Missing values will be set to the supplied | |
placeholder." | |
([size placeholder tuples] | |
(sparse-vector 0 size placeholder tuples)) | |
([offset size placeholder tuples] | |
(loop [idx 0 | |
tup-seq tuples | |
v (transient [])] | |
(let [[pos val] (first tup-seq)] | |
(cond (>= idx size) (persistent! v) | |
(= idx pos) (recur (inc idx) (rest tup-seq) (conj! v val)) | |
:else (recur (inc idx) tup-seq (conj! v placeholder))))))) | |
(sparse-vector 0 10 0 [[4 1]]) | |
;=> [0 0 0 0 1 0 0 0 0 0] | |
(defn sparse-vector | |
"Takes in a sequence of 2-tuples of the form `<idx, val>` and | |
generates a sparse vector with each `val` inserted at its | |
corresponding `idx`. Missing values will be set to the supplied | |
placeholder." | |
([size placeholder tuples] | |
(sparse-vector 0 size placeholder tuples)) | |
([offset size placeholder tuples] | |
(loop [idx 0 | |
tup-seq tuples | |
v (transient [])] | |
(let [[pos val] (first tup-seq) | |
p (- pos offset)] | |
(cond (>= idx size) (persistent! v) | |
(= idx pos) (recur (inc idx) (rest tup-seq) (conj! v val)) | |
:else (recur (inc idx) tup-seq (conj! v placeholder))))))) | |
(sparse-vector 0 10 0 [[4 1]]) | |
No message. | |
[Thrown class java.lang.NullPointerException] | |
Restarts: | |
0: [QUIT] Quit to the SLIME top level | |
Backtrace: | |
0: clojure.lang.Numbers.ops(Numbers.java:1364) | |
1: clojure.lang.Numbers.minus(Numbers.java:128) | |
2: forma.matrix.utils$sparse_vector.invoke(NO_SOURCE_FILE:1) | |
3: forma.matrix.utils$eval7239.invoke(NO_SOURCE_FILE:1) | |
4: clojure.lang.Compiler.eval(Compiler.java:5424) | |
5: clojure.lang.Compiler.eval(Compiler.java:5391) | |
6: clojure.core$eval.invoke(core.clj:2382) | |
7: swank.core$eval922$fn__923.invoke(core.clj:409) | |
8: clojure.lang.MultiFn.invoke(MultiFn.java:163) | |
9: swank.commands.basic$eval_region.invoke(basic.clj:48) | |
10: swank.commands.basic$eval_region.invoke(basic.clj:38) | |
11: swank.commands.basic$eval1223$listener_eval__1224.invoke(basic.clj:72) | |
12: clojure.lang.Var.invoke(Var.java:365) | |
13: forma.matrix.utils$eval7237.invoke(NO_SOURCE_FILE) | |
14: clojure.lang.Compiler.eval(Compiler.java:5424) | |
15: clojure.lang.Compiler.eval(Compiler.java:5391) | |
16: clojure.core$eval.invoke(core.clj:2382) | |
17: swank.core$eval_in_emacs_package.invoke(core.clj:94) | |
18: swank.core$eval_for_emacs.invoke(core.clj:241) | |
19: clojure.lang.Var.invoke(Var.java:373) | |
20: clojure.lang.AFn.applyToHelper(AFn.java:169) | |
21: clojure.lang.Var.applyTo(Var.java:482) | |
22: clojure.core$apply.invoke(core.clj:540) | |
23: swank.core$eval_from_control.invoke(core.clj:101) | |
24: swank.core$eval_loop.invoke(core.clj:106) | |
25: swank.core$spawn_repl_thread$fn__881$fn__882.invoke(core.clj:320) | |
26: clojure.lang.AFn.applyToHelper(AFn.java:159) | |
27: clojure.lang.AFn.applyTo(AFn.java:151) | |
28: clojure.core$apply.invoke(core.clj:540) | |
29: swank.core$spawn_repl_thread$fn__881.doInvoke(core.clj:317) | |
30: clojure.lang.RestFn.invoke(RestFn.java:398) | |
31: clojure.lang.AFn.run(AFn.java:24) | |
32: java.lang.Thread.run(Thread.java:680) |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment