I'm attempting to implement Othello in Clojure and I've run into a problem when actually running my game loop. On the first run through, everything works as expected, the black player can make their move, the board is updated and everything is awesome. However when the program loops and it is the white players turn, after they have entered their move the program crashes with the stacktrace at the bottom of this message..
From what I can tell from the ST the error is from my "squares-to-flip" function but I'm unable to reproduce the results in the repl, and I've yet to reach the point where I'm adding a print on every second line (though I'm close).
I had originally deduced it was the 'merge' call on the times I would have an empty second argument, hence the 'if' in there but that doesn't appear to have helped at all.
I assume it's something I've not anticipated or accounted for with respect to my loop, but I'm not quite sure..
Exception in thread "main" java.lang.ClassCastException: clojure.lang.PersistentHashMap cannot be cast to java.util.Map$Entry
at clojure.lang.APersistentMap.cons(APersistentMap.java:42)
at clojure.lang.RT.conj(RT.java:562)
at clojure.core$conj.invoke(core.clj:83)
at clojure.core$merge$fn__4275.invoke(core.clj:2684)
at clojure.core$reduce1.invoke(core.clj:896)
at clojure.core$reduce1.invoke(core.clj:887)
at clojure.core$merge.doInvoke(core.clj:2684)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at othello.core$squares_to_flip.invoke(core.clj:186)
at othello.core$game_loop.invoke(core.clj:213)
at othello.core$_main.doInvoke(core.clj:225)
at clojure.lang.RestFn.invoke(RestFn.java:397)
at clojure.lang.Var.invoke(Var.java:411)
at user$eval5$fn__7.invoke(form-init5981136443637675542.clj:1)
at user$eval5.invoke(form-init5981136443637675542.clj:1)
at clojure.lang.Compiler.eval(Compiler.java:6619)
at clojure.lang.Compiler.eval(Compiler.java:6609)
at clojure.lang.Compiler.load(Compiler.java:7064)
at clojure.lang.Compiler.loadFile(Compiler.java:7020)
at clojure.main$load_script.invoke(main.clj:294)
at clojure.main$init_opt.invoke(main.clj:299)
at clojure.main$initialize.invoke(main.clj:327)
at clojure.main$null_opt.invoke(main.clj:362)
at clojure.main$main.doInvoke(main.clj:440)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:419)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)