Skip to content

Instantly share code, notes, and snippets.

@broquaint
Created December 22, 2011 14:22
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 broquaint/1510460 to your computer and use it in GitHub Desktop.
Save broquaint/1510460 to your computer and use it in GitHub Desktop.
Confused by for and nested structures
$ lein test
Testing fore-clojure.test.core
PFS [[[[:a :b]]] [[:c :d]] [:e :f]]
COND true [[:a :b]] [[[:a :b]]]
- PFS [[:a :b]]
COND true [:c :d] [[:c :d]]
- PFS [:c :d]
COND false :e [:e :f]
- COND false :a [:a :b]
FAIL in (can-partially-flatten-a-sequence) (core.clj:6)
(= (partially-flatten-a-sequence-solution [[[[:a :b]]] [[:c :d]] [:e :f]])
[[:a :b] [:c :d] [:e :f]])
expected: (= (partially-flatten-a-sequence-solution [[[[:a :b]]] [[:c :d]] [:e :f]]) [[:a :b] [:c :d] [:e :f]])
ERROR in (can-partially-flatten-a-sequence) (LazySeq.java:47)
(= (partially-flatten-a-sequence-solution [[[[:a :b]]] [[:c :d]] [:e :f]])
[[:a :b] [:c :d] [:e :f]])
expected: (= (partially-flatten-a-sequence-solution [[[[:a :b]]] [[:c :d]] [:e :f]]) [[:a :b] [:c :d] [:e :f]])
actual: java.lang.RuntimeException: java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Keyword
LazySeq.java:47 clojure.lang.LazySeq.sval
LazySeq.java:56 clojure.lang.LazySeq.seq
RT.java:450 clojure.lang.RT.seq
core.clj:122 clojure.core/seq
core_print.clj:44 clojure.core/print-sequential
core_print.clj:138 clojure.core/fn
MultiFn.java:167 clojure.lang.MultiFn.invoke
core.clj:2812 clojure.core/pr-on
core_print.clj:56 clojure.core/print-sequential
core_print.clj:138 clojure.core/fn
MultiFn.java:167 clojure.lang.MultiFn.invoke
core.clj:2812 clojure.core/pr-on
core_print.clj:56 clojure.core/print-sequential
core_print.clj:138 clojure.core/fn
MultiFn.java:167 clojure.lang.MultiFn.invoke
core.clj:2812 clojure.core/pr-on
core_print.clj:56 clojure.core/print-sequential
core_print.clj:138 clojure.core/fn
MultiFn.java:167 clojure.lang.MultiFn.invoke
core.clj:2812 clojure.core/pr-on
core.clj:2824 clojure.core/pr
AFn.java:161 clojure.lang.AFn.applyToHelper
RestFn.java:132 clojure.lang.RestFn.applyTo
core.clj:540 clojure.core/apply
core.clj:3700 clojure.core/pr-str
RestFn.java:408 clojure.lang.RestFn.invoke
test.clj:361 clojure.test/fn
MultiFn.java:163 clojure.lang.MultiFn.invoke
AFn.java:161 clojure.lang.AFn.applyToHelper
AFn.java:151 clojure.lang.AFn.applyTo
core.clj:542 clojure.core/apply
NO_SOURCE_FILE:1 user/eval125[fn]
RestFn.java:425 clojure.lang.RestFn.invoke
AFn.java:163 clojure.lang.AFn.applyToHelper
RestFn.java:132 clojure.lang.RestFn.applyTo
core.clj:542 clojure.core/apply
NO_SOURCE_FILE:1 leiningen.util.injected$compose_hooks$fn__105.doInvoke
RestFn.java:137 clojure.lang.RestFn.applyTo
core.clj:540 clojure.core/apply
NO_SOURCE_FILE:1 leiningen.util.injected$run_hooks.invoke
NO_SOURCE_FILE:1 leiningen.util.injected$prepare_for_hooks$fn__110$fn__111.doInvoke
RestFn.java:408 clojure.lang.RestFn.invoke
test.clj:344 clojure.test/do-report
core.clj:6 fore-clojure.test.core/fn
test.clj:688 clojure.test/test-var[fn]
test.clj:688 clojure.test/test-var
test.clj:704 clojure.test/test-all-vars[fn]
test.clj:658 clojure.test/default-fixture
test.clj:704 clojure.test/test-all-vars[fn]
test.clj:658 clojure.test/default-fixture
test.clj:700 clojure.test/test-all-vars
test.clj:723 clojure.test/test-ns
core.clj:2096 clojure.core/map[fn]
LazySeq.java:42 clojure.lang.LazySeq.sval
LazySeq.java:56 clojure.lang.LazySeq.seq
Cons.java:39 clojure.lang.Cons.next
RT.java:1186 clojure.lang.RT.boundedLength
RestFn.java:130 clojure.lang.RestFn.applyTo
core.clj:542 clojure.core/apply
test.clj:738 clojure.test/run-tests
RestFn.java:137 clojure.lang.RestFn.applyTo
core.clj:540 clojure.core/apply
NO_SOURCE_FILE:1 user/eval125[fn]
NO_SOURCE_FILE:1 user/eval125
Compiler.java:5424 clojure.lang.Compiler.eval
Compiler.java:5415 clojure.lang.Compiler.eval
Compiler.java:5391 clojure.lang.Compiler.eval
core.clj:2382 clojure.core/eval
main.clj:235 clojure.main/eval-opt
main.clj:254 clojure.main/initialize
main.clj:279 clojure.main/null-opt
main.clj:354 clojure.main/main
RestFn.java:421 clojure.lang.RestFn.invoke
Var.java:369 clojure.lang.Var.invoke
AFn.java:163 clojure.lang.AFn.applyToHelper
Var.java:482 clojure.lang.Var.applyTo
main.java:37 clojure.main.main
Caused by: java.lang.IllegalArgumentException: Don't know how to create ISeq from: clojure.lang.Keyword
RT.java:471 clojure.lang.RT.seqFrom
RT.java:452 clojure.lang.RT.seq
RT.java:540 clojure.lang.RT.first
core.clj:53 clojure.core/first
core.clj:10 fore-clojure.core/partially-flatten-a-sequence-solution[fn]
core.clj:10 fore-clojure.core/partially-flatten-a-sequence-solution[fn]
LazySeq.java:42 clojure.lang.LazySeq.sval
Ran 1 tests containing 2 assertions.
1 failures, 1 errors.
(ns fore-clojure.core
(:require [clojure.string]))
;; [
;; [
;; [
;; [:a :b]
;; ]
;; ]
;; [
;; [:c :d]
;; ]
;; [:e :f]
;; ]
(defn partially-flatten-a-sequence-solution
([pfs] (partially-flatten-a-sequence-solution pfs 0))
([pfs depth]
(let [indent (clojure.string/join "" (repeat depth "-"))]
(println indent "PFS" pfs)
(for [s pfs :let [x (first s)]]
;; Please excuse the eye-burning amateurish debugging ...
(if (first (list (coll? x) (println indent "COND" (coll? x) x s)))
(partially-flatten-a-sequence-solution x (inc depth))
s))))
)
(ns fore-clojure.test.core
(:use [fore-clojure.core])
(:use [clojure.test]))
(deftest can-partially-flatten-a-sequence
(is (= (partially-flatten-a-sequence-solution [[[[:a :b]]] [[:c :d]] [:e :f]])
[[:a :b] [:c :d] [:e :f]]) " (= (partially-flatten-a-sequence-solution [[[[:a :b]]] [[:c :d]] [:e :f]])
[[:a :b] [:c :d] [:e :f]]) " )
)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment