debugging - How to debug clpfd programs? -


i have program in sicstus prolog (clpfd) , see going on during labeling. tried trace verbose makes hard understand going on (what values assigned variables, how constraints propagated, etc.).

a shortened version of program:

runtt(goal) :-       plst_1 in {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59},     dlst_1 in {0, 1, 2, 3, 4},     dlst_1 #= plst_1 / 12,     % t: bo, s: a, d: 1     plst_2 in {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59},     dlst_2 in {0, 1, 2, 3, 4},     dlst_2 #= plst_2 / 12,     domain__i0_01_0 in 0..1, domain__i0_01_1 in 0..1, domain__i0_01_2 in 0..1, domain__i0_01_3 in 0..1, domain__i0_01_4 in 0..1, domain__i0_01_5 in 0..1, domain__i0_01_6 in 0..1, domain__i0_01_7 in 0..1, domain__i0_01_8 in 0..1, domain__i0_01_9 in 0..1, domain__i0_01_10 in 0..1, domain__i0_01_11 in 0..1, domain__i0_01_12 in 0..1, domain__i0_01_13 in 0..1, domain__i0_01_14 in 0..1, domain__i0_01_15 in 0..1, domain__i0_01_16 in 0..1, domain__i0_01_17 in 0..1, domain__i0_01_18 in 0..1, domain__i0_01_19 in 0..1, domain__i0_01_20 in 0..1, domain__i0_01_21 in 0..1, domain__i0_01_22 in 0..1, domain__i0_01_23 in 0..1, domain__i0_01_24 in 0..1, domain__i0_01_25 in 0..1, domain__i0_01_26 in 0..1, domain__i0_01_27 in 0..1, domain__i0_01_28 in 0..1, domain__i0_01_29 in 0..1, domain__i0_01_30 in 0..1, domain__i0_01_31 in 0..1, domain__i0_01_32 in 0..1, domain__i0_01_33 in 0..1, domain__i0_01_34 in 0..1, domain__i0_01_35 in 0..1, domain__i0_01_36 in 0..1, domain__i0_01_37 in 0..1, domain__i0_01_38 in 0..1, domain__i0_01_39 in 0..1, domain__i0_01_40 in 0..1, domain__i0_01_41 in 0..1, domain__i0_01_42 in 0..1, domain__i0_01_43 in 0..1, domain__i0_01_44 in 0..1, domain__i0_01_45 in 0..1, domain__i0_01_46 in 0..1, domain__i0_01_47 in 0..1, domain__i0_01_48 in 0..1, domain__i0_01_49 in 0..1, domain__i0_01_50 in 0..1, domain__i0_01_51 in 0..1, domain__i0_01_52 in 0..1, domain__i0_01_53 in 0..1, domain__i0_01_54 in 0..1, domain__i0_01_55 in 0..1, domain__i0_01_56 in 0..1, domain__i0_01_57 in 0..1, domain__i0_01_58 in 0..1, domain__i0_01_59 in 0..1,     global_cardinality([ plst_1, plst_2, plst_3 ], [0-domain__i0_01_0, 1-domain__i0_01_1, 2-domain__i0_01_2, 3-domain__i0_01_3, 4-domain__i0_01_4, 5-domain__i0_01_5, 6-domain__i0_01_6, 7-domain__i0_01_7, 8-domain__i0_01_8, 9-domain__i0_01_9, 10-domain__i0_01_10, 11-domain__i0_01_11, 12-domain__i0_01_12, 13-domain__i0_01_13, 14-domain__i0_01_14, 15-domain__i0_01_15, 16-domain__i0_01_16, 17-domain__i0_01_17, 18-domain__i0_01_18, 19-domain__i0_01_19, 20-domain__i0_01_20, 21-domain__i0_01_21, 22-domain__i0_01_22, 23-domain__i0_01_23, 24-domain__i0_01_24, 25-domain__i0_01_25, 26-domain__i0_01_26, 27-domain__i0_01_27, 28-domain__i0_01_28, 29-domain__i0_01_29, 30-domain__i0_01_30, 31-domain__i0_01_31, 32-domain__i0_01_32, 33-domain__i0_01_33, 34-domain__i0_01_34, 35-domain__i0_01_35, 36-domain__i0_01_36, 37-domain__i0_01_37, 38-domain__i0_01_38, 39-domain__i0_01_39, 40-domain__i0_01_40, 41-domain__i0_01_41, 42-domain__i0_01_42, 43-domain__i0_01_43, 44-domain__i0_01_44, 45-domain__i0_01_45, 46-domain__i0_01_46, 47-domain__i0_01_47, 48-domain__i0_01_48, 49-domain__i0_01_49, 50-domain__i0_01_50, 51-domain__i0_01_51, 52-domain__i0_01_52, 53-domain__i0_01_53, 54-domain__i0_01_54, 55-domain__i0_01_55, 56-domain__i0_01_56, 57-domain__i0_01_57, 58-domain__i0_01_58, 59-domain__i0_01_59]),     goal = [plst_1, plst_2],     labeling([], goal). 

thanks hint!

note: love remove "domain hell" far understand prolog cannot use 1 variable (e.g. domain_01).

i've seen there ad hoc debugger, i'm sorry i've never used it.

that apart, tried visualization of constraint solving, suggested markus triska, but, apart requiring modify program, it's simple curiosity, not real debugging tool.

swi-prolog debugger displays constraint store (attributed variables) in rather readable way. because labeling implemented in prolog, think should possible - pain - follow labeling process stepping inside library(clpfd) source.


Comments

Popular posts from this blog

linux - xterm copying to CLIPBOARD using copy-selection causes automatic updating of CLIPBOARD upon mouse selection -

qt - Errors in generated MOC files for QT5 from cmake -