core.logic

ClassCastException in core.logic depending on ordering

Details

  • Type: Defect Defect
  • Status: Closed Closed
  • Priority: Major Major
  • Resolution: Completed
  • Affects Version/s: None
  • Fix Version/s: None
  • Component/s: None
  • Labels:

Description

I have two files:
1 -https://github.com/m0smith/LogicPuzzles/blob/master/src/logicpuzzles/coresucceed.clj
2 -https://github.com/m0smith/LogicPuzzles/blob/master/src/logicpuzzles/corefail.clj

The first one compiles and runs fine. The second throws a ClassCastException. The only difference is that rule-0 is moved in the second file.

Activity

Hide
Matthew O. Smith added a comment -

corefail.clj exhibits the error

Show
Matthew O. Smith added a comment - corefail.clj exhibits the error
Hide
David Nolen added a comment -

Thanks can you add the failing code to the ticket as an attachment? Thanks.

Show
David Nolen added a comment - Thanks can you add the failing code to the ticket as an attachment? Thanks.
Hide
Matthew O. Smith added a comment -
Show
Matthew O. Smith added a comment - I tightened up the fail case https://github.com/m0smith/LogicPuzzles/blob/master/src/logicpuzzles/corefail.clj . Is that enough?
Hide
Matthew O. Smith added a comment -

Here is the stack trace. I will try to narrow it down further.

java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IPersistentSet
at clojure.core$disj.invoke (core.clj:1420)
clojure.core.logic.ConstraintStore/fn (logic.clj:339)
clojure.lang.ArrayChunk.reduce (ArrayChunk.java:58)
clojure.core.protocols/fn (protocols.clj:94)
clojure.core.protocols$fn_5854$G5849_5863.invoke (protocols.clj:19)
clojure.core.protocols$seq_reduce.invoke (protocols.clj:31)
clojure.core.protocols/fn (protocols.clj:60)
clojure.core.protocols$fn_5828$G5823_5841.invoke (protocols.clj:13)
clojure.core$reduce.invoke (core.clj:6030)
clojure.core.logic.ConstraintStore.remc (logic.clj:338)
clojure.core.logic$remcg$fn__3272.invoke (logic.clj:2374)
clojure.core.logic$BANG$reify_3422.invoke (logic.clj:2719)
clojure.core.logic$composeg$fn__2569.invoke (logic.clj:1141)
clojure.core.logic$composeg$fn__2569.invoke (logic.clj:1142)
clojure.core.logic$run_constraint$fn__3285.invoke (logic.clj:2397)
clojure.core.logic$fix_constraints.invoke (logic.clj:2424)
clojure.core.logic$run_constraints$fn__3290.invoke (logic.clj:2434)
clojure.core.logic.Substitutions.bind (logic.clj:612)
clojure.core.logic$run_constraints_STAR_$fn__3296.invoke (logic.clj:2444)
clojure.core.logic.Substitutions.bind (logic.clj:612)
clojure.core.logic$run_constraints_STAR_$fn__3296.invoke (logic.clj:2446)
clojure.core.logic$EQEQ$fn__2647.invoke (logic.clj:1255)
clojure.core.logic.Substitutions.bind (logic.clj:612)
clojure.core.logic$rembero$fn_3465$_inc3466$fn3475$fn3476$_inc3477$fn3478$_inc_3479.invoke (logic.clj:2790)
clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223)
clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223)
clojure.core.logic$eval2628$fn_2637$_inc_2638.invoke (logic.clj:1220)
clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223)
clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223)
clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223)
clojure.core.logic$eval2628$fn_2637$_inc_2638.invoke (logic.clj:1220)
clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223)
clojure.core.logic$eval2628$fn_2637$_inc_2638.invoke (logic.clj:1220)
clojure.core.logic$eval2628$fn_2629$fn_2630.invoke (logic.clj:1225)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:67)
clojure.lang.RT.seq (RT.java:473)
clojure.core$seq.invoke (core.clj:133)
clojure.core$take$fn__4112.invoke (core.clj:2501)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:60)
clojure.lang.LazySeq.first (LazySeq.java:82)
clojure.lang.RT.first (RT.java:566)
clojure.core$first.invoke (core.clj:55)
clojure.pprint$pprint_reader_macro.invoke (dispatch.clj:50)
clojure.pprint$pprint_list.invoke (dispatch.clj:77)
clojure.lang.MultiFn.invoke (MultiFn.java:163)
clojure.pprint$write_out.invoke (pprint_base.clj:194)
clojure.pprint$pprint_vector$fn__7949.invoke (dispatch.clj:83)
clojure.pprint$pprint_vector.invoke (dispatch.clj:82)
clojure.lang.MultiFn.invoke (MultiFn.java:163)
clojure.pprint$write_out.invoke (pprint_base.clj:194)
clojure.pprint$pprint$fn__7359.invoke (pprint_base.clj:250)
clojure.pprint$pprint.invoke (pprint_base.clj:248)
clojure.pprint$pprint.invoke (pprint_base.clj:245)
logicpuzzles.corefail$show.invoke (corefail.clj:9)
logicpuzzles.corefail$eval3796.invoke (corefail.clj:153)
clojure.lang.Compiler.eval (Compiler.java:6511)
clojure.lang.Compiler.load (Compiler.java:6952)
user$eval971.invoke (NO_SOURCE_FILE:1)
clojure.lang.Compiler.eval (Compiler.java:6511)
clojure.lang.Compiler.eval (Compiler.java:6477)
clojure.core$eval.invoke (core.clj:2797)
clojure.main$repl$read_eval_print__6405.invoke (main.clj:245)
clojure.main$repl$fn__6410.invoke (main.clj:266)
clojure.main$repl.doInvoke (main.clj:266)
clojure.lang.RestFn.invoke (RestFn.java:1096)
clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__544.invoke (interruptible_eval.clj:56)
clojure.lang.AFn.applyToHelper (AFn.java:159)
clojure.lang.AFn.applyTo (AFn.java:151)
clojure.core$apply.invoke (core.clj:601)
clojure.core$with_bindings_STAR_.doInvoke (core.clj:1771)
clojure.lang.RestFn.invoke (RestFn.java:425)
clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke (interruptible_eval.clj:41)
clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn_585$fn_587.invoke (interruptible_eval.clj:171)
clojure.core$comp$fn__4034.invoke (core.clj:2278)
clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__578.invoke (interruptible_eval.clj:138)
clojure.lang.AFn.run (AFn.java:24)
java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615)
java.lang.Thread.run (Thread.java:722)

Show
Matthew O. Smith added a comment - Here is the stack trace. I will try to narrow it down further. java.lang.ClassCastException: clojure.lang.PersistentList cannot be cast to clojure.lang.IPersistentSet at clojure.core$disj.invoke (core.clj:1420) clojure.core.logic.ConstraintStore/fn (logic.clj:339) clojure.lang.ArrayChunk.reduce (ArrayChunk.java:58) clojure.core.protocols/fn (protocols.clj:94) clojure.core.protocols$fn_5854$G5849_5863.invoke (protocols.clj:19) clojure.core.protocols$seq_reduce.invoke (protocols.clj:31) clojure.core.protocols/fn (protocols.clj:60) clojure.core.protocols$fn_5828$G5823_5841.invoke (protocols.clj:13) clojure.core$reduce.invoke (core.clj:6030) clojure.core.logic.ConstraintStore.remc (logic.clj:338) clojure.core.logic$remcg$fn__3272.invoke (logic.clj:2374) clojure.core.logic$BANG$reify_3422.invoke (logic.clj:2719) clojure.core.logic$composeg$fn__2569.invoke (logic.clj:1141) clojure.core.logic$composeg$fn__2569.invoke (logic.clj:1142) clojure.core.logic$run_constraint$fn__3285.invoke (logic.clj:2397) clojure.core.logic$fix_constraints.invoke (logic.clj:2424) clojure.core.logic$run_constraints$fn__3290.invoke (logic.clj:2434) clojure.core.logic.Substitutions.bind (logic.clj:612) clojure.core.logic$run_constraints_STAR_$fn__3296.invoke (logic.clj:2444) clojure.core.logic.Substitutions.bind (logic.clj:612) clojure.core.logic$run_constraints_STAR_$fn__3296.invoke (logic.clj:2446) clojure.core.logic$EQEQ$fn__2647.invoke (logic.clj:1255) clojure.core.logic.Substitutions.bind (logic.clj:612) clojure.core.logic$rembero$fn_3465$_inc3466$fn3475$fn3476$_inc3477$fn3478$_inc_3479.invoke (logic.clj:2790) clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223) clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223) clojure.core.logic$eval2628$fn_2637$_inc_2638.invoke (logic.clj:1220) clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223) clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223) clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223) clojure.core.logic$eval2628$fn_2637$_inc_2638.invoke (logic.clj:1220) clojure.core.logic$eval2628$fn_2633$_inc_2634.invoke (logic.clj:1223) clojure.core.logic$eval2628$fn_2637$_inc_2638.invoke (logic.clj:1220) clojure.core.logic$eval2628$fn_2629$fn_2630.invoke (logic.clj:1225) clojure.lang.LazySeq.sval (LazySeq.java:42) clojure.lang.LazySeq.seq (LazySeq.java:67) clojure.lang.RT.seq (RT.java:473) clojure.core$seq.invoke (core.clj:133) clojure.core$take$fn__4112.invoke (core.clj:2501) clojure.lang.LazySeq.sval (LazySeq.java:42) clojure.lang.LazySeq.seq (LazySeq.java:60) clojure.lang.LazySeq.first (LazySeq.java:82) clojure.lang.RT.first (RT.java:566) clojure.core$first.invoke (core.clj:55) clojure.pprint$pprint_reader_macro.invoke (dispatch.clj:50) clojure.pprint$pprint_list.invoke (dispatch.clj:77) clojure.lang.MultiFn.invoke (MultiFn.java:163) clojure.pprint$write_out.invoke (pprint_base.clj:194) clojure.pprint$pprint_vector$fn__7949.invoke (dispatch.clj:83) clojure.pprint$pprint_vector.invoke (dispatch.clj:82) clojure.lang.MultiFn.invoke (MultiFn.java:163) clojure.pprint$write_out.invoke (pprint_base.clj:194) clojure.pprint$pprint$fn__7359.invoke (pprint_base.clj:250) clojure.pprint$pprint.invoke (pprint_base.clj:248) clojure.pprint$pprint.invoke (pprint_base.clj:245) logicpuzzles.corefail$show.invoke (corefail.clj:9) logicpuzzles.corefail$eval3796.invoke (corefail.clj:153) clojure.lang.Compiler.eval (Compiler.java:6511) clojure.lang.Compiler.load (Compiler.java:6952) user$eval971.invoke (NO_SOURCE_FILE:1) clojure.lang.Compiler.eval (Compiler.java:6511) clojure.lang.Compiler.eval (Compiler.java:6477) clojure.core$eval.invoke (core.clj:2797) clojure.main$repl$read_eval_print__6405.invoke (main.clj:245) clojure.main$repl$fn__6410.invoke (main.clj:266) clojure.main$repl.doInvoke (main.clj:266) clojure.lang.RestFn.invoke (RestFn.java:1096) clojure.tools.nrepl.middleware.interruptible_eval$evaluate$fn__544.invoke (interruptible_eval.clj:56) clojure.lang.AFn.applyToHelper (AFn.java:159) clojure.lang.AFn.applyTo (AFn.java:151) clojure.core$apply.invoke (core.clj:601) clojure.core$with_bindings_STAR_.doInvoke (core.clj:1771) clojure.lang.RestFn.invoke (RestFn.java:425) clojure.tools.nrepl.middleware.interruptible_eval$evaluate.invoke (interruptible_eval.clj:41) clojure.tools.nrepl.middleware.interruptible_eval$interruptible_eval$fn_585$fn_587.invoke (interruptible_eval.clj:171) clojure.core$comp$fn__4034.invoke (core.clj:2278) clojure.tools.nrepl.middleware.interruptible_eval$run_next$fn__578.invoke (interruptible_eval.clj:138) clojure.lang.AFn.run (AFn.java:24) java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1145) java.util.concurrent.ThreadPoolExecutor$Worker.run (ThreadPoolExecutor.java:615) java.lang.Thread.run (Thread.java:722)
Hide
David Nolen added a comment -

There's far too much context here. Do you have a minimal case? Thanks much!

Show
David Nolen added a comment - There's far too much context here. Do you have a minimal case? Thanks much!

People

Vote (0)
Watch (1)

Dates

  • Created:
    Updated:
    Resolved: