1 2%%% The following code has been produced by the CHR compiler 3 4 5:- ( current_module(chr) -> true ; use_module(library(chr)) ). 6 7:- get_flag(variable_names, Val), setval(variable_names_flag, Val), set_flag(variable_names, off). 8:- op(700, xfx, eqlist). 9:- op(700, xfx, lenlist). 10chr_member(_1664, _1667) :- eqlist([_1674, [_1664], _1680], _1667). 11chr_append(_1693, _1696, _1699) :- eqlist([_1693, _1696], _1699). 12chr_last(_1722, _1725) :- eqlist([_1732, [_1725]], _1722). 13palindrome([]). 14palindrome([_1761]). 15palindrome(_1772) :- lenlist(_1778, 1), eqlist([_1778, _1789, _1778], _1772), palindrome(_1789). 16reverse([], []). 17reverse(_1907, _1910) :- lenlist(_1907, _1920), lenlist(_1910, _1920), lenlist(_1930, 1), eqlist([_1930, _1941], _1907), eqlist([_1950, _1930], _1910), reverse(_1941, _1950). 18permute([], []). 19permute(_2141, _2144) :- lenlist(_2141, _2154), lenlist(_2144, _2154), lenlist(_2164, 1), eqlist([_2164, _2175], _2141), eqlist([_2184, _2164, _2189], _2144), eqlist([_2184, _2189], _2203), permute(_2175, _2203). 20tree([_2420], [_2420], _2420) :- var(_2420) -> suspend(atomic(_2420), 3, _2420 -> inst) ; atomic(_2420). 21tree(_2571, _2574, t(_2579, _2582, _2585)) :- eqlist([[_2579], _2603, _2606], _2571), eqlist([_2615, _2618, [_2579]], _2574), tree(_2603, _2615, _2582), tree(_2606, _2618, _2585). 22transpose([], _2837) :- eqlist([_2837, [[]]], [[]|_2837]). 23transpose([_2865|_2866], _2869) :- first_column(_2869, _2865, _2882), transpose(_2866, _2882). 24first_column([], [], []). 25first_column([[_2987|_2988]|_2989], [_2987|_2994], [_2988|_2999]) :- first_column(_2989, _2994, _2999). 26 27 28 29%%% Callables for eqlist / 2 30 31'CHRlabel_with'(eqlist(A, B), C, D) ?- 32 coca(try_clause(D, eqlist(A, B), eqlist(E, F), true)), 33 coca(clause_fired(D)), 34 'CHR='(C, clause_eqlist(A, B)). 35 36 37 38%%% Prolog clauses for eqlist / 2 39 40clause_eqlist([A|B], C) :- 41 ( 42 var(C) 43 -> 44 length(C, D) 45 ; 46 true 47 ), 48 ( 49 A = [], 50 eqlist(B, C) 51 ; 52 C = [E|F], 53 A = [E|G], 54 eqlist([G|B], F) 55 ). 56:- current_macro(clause_eqlist / 2, _3259, _3260, _3261) -> true ; define_macro(clause_eqlist / 2, tr_chr / 2, [write]). 57eqlist(A, B) :- 58 'CHRgen_num'(C), 59 coca(add_one_constraint(C, eqlist(A, B))), 60 'CHReqlist_2'(eqlist(A, B), D, E, C). 61 62 63 64%%% Rules handling for eqlist / 2 65 66'CHReqlist_2'(eqlist(A, B), C, D, E) :- 67 'CHRnonvar'(C), 68 !. 69'CHReqlist_2'(eqlist([], A), B, C, D) ?- 70 coca(try_rule(D, eqlist([], A), anonymous("0"), eqlist([], E), replacement, true, E = [])), 71 !, 72 'CHRkill'(B), 73 coca(fired_rule(anonymous("0"))), 74 A = []. 75'CHReqlist_2'(eqlist([A], B), C, D, E) ?- 76 coca(try_rule(E, eqlist([A], B), anonymous("1"), eqlist([F], G), replacement, true, F = G)), 77 !, 78 'CHRkill'(C), 79 coca(fired_rule(anonymous("1"))), 80 A = B. 81'CHReqlist_2'(eqlist([A|B], []), C, D, E) ?- 82 coca(try_rule(E, eqlist([A|B], []), anonymous("2"), eqlist([F|G], []), replacement, true, (F = [], eqlist(G, [])))), 83 !, 84 'CHRkill'(C), 85 coca(fired_rule(anonymous("2"))), 86 A = [], 87 eqlist(B, []). 88'CHReqlist_2'(eqlist([[A|B]|C], D), E, F, G) ?- 89 coca(try_rule(G, eqlist([[A|B]|C], D), anonymous("3"), eqlist([[H|I]|J], K), replacement, true, (K = [H|L], eqlist([I|J], L)))), 90 !, 91 'CHRkill'(E), 92 coca(fired_rule(anonymous("3"))), 93 D = [A|M], 94 eqlist([B|C], M). 95'CHReqlist_2'(eqlist(A, B), C, D, E) ?- 96 coca(try_rule(E, eqlist(A, B), anonymous("4"), eqlist(F, G), replacement, (delete(H, F, I), H == []), eqlist(I, G))), 97 no_delayed_goals((delete(J, A, K), J == [])), 98 !, 99 'CHRkill'(C), 100 coca(fired_rule(anonymous("4"))), 101 eqlist(K, B). 102'CHReqlist_2'(eqlist(A, B), C, D, E) ?- 103 coca(try_rule(E, eqlist(A, B), anonymous("5"), eqlist(F, G), replacement, (delete(H, F, I), H == G), eqlist(I, []))), 104 no_delayed_goals((delete(J, A, K), J == B)), 105 !, 106 'CHRkill'(C), 107 coca(fired_rule(anonymous("5"))), 108 eqlist(K, []). 109'CHReqlist_2'(eqlist(A, B), C, D, E) :- 110 'CHReqlist_2__9'(eqlist(A, B), C, D, E). 111:- set_flag('CHReqlist_2' / 4, leash, notrace). 112:- current_macro('CHReqlist_2' / 4, _4322, _4323, _4324) -> true ; define_macro('CHReqlist_2' / 4, tr_chr / 2, [write]). 113'CHReqlist_2__9'(A, B, C, D) :- 114 'CHReqlist_2__10'(A, B, C, D). 115:- set_flag('CHReqlist_2__9' / 4, leash, notrace). 116'CHReqlist_2__10'(eqlist(A, B), C, D, E) :- 117 ( 118 'CHRvar'(C) 119 -> 120 'CHRdelay'([C, eqlist(A, B)], 'CHReqlist_2'(eqlist(A, B), C, D, E)) 121 ; 122 true 123 ). 124:- set_flag('CHReqlist_2__10' / 4, leash, notrace). 125lenlist(A, B) :- 126 'CHRgen_num'(C), 127 coca(add_one_constraint(C, lenlist(A, B))), 128 'CHRlenlist_2'(lenlist(A, B), D, E, C). 129 130 131 132%%% Rules handling for lenlist / 2 133 134'CHRlenlist_2'(lenlist(A, B), C, D, E) :- 135 'CHRnonvar'(C), 136 !. 137'CHRlenlist_2'(lenlist([], A), B, C, D) ?- 138 coca(try_rule(D, lenlist([], A), anonymous("6"), lenlist([], E), replacement, true, var(E) -> E = 0 ; E =:= 0)), 139 !, 140 'CHRkill'(B), 141 coca(fired_rule(anonymous("6"))), 142 ( 143 var(A) 144 -> 145 A = 0 146 ; 147 A =:= 0 148 ). 149'CHRlenlist_2'(lenlist([A|B], C), D, E, F) ?- 150 coca(try_rule(F, lenlist([A|B], C), anonymous("7"), lenlist([G|H], I), replacement, true, (I > 0, plus(J, 1, I), lenlist(H, J)))), 151 !, 152 'CHRkill'(D), 153 coca(fired_rule(anonymous("7"))), 154 C > 0, 155 plus(K, 1, C), 156 lenlist(B, K). 157'CHRlenlist_2'(lenlist(A, B), C, D, E) ?- 158 coca(try_rule(E, lenlist(A, B), anonymous("8"), lenlist(F, G), replacement, ground(G), length(F, G))), 159 no_delayed_goals(ground(B)), 160 !, 161 'CHRkill'(C), 162 coca(fired_rule(anonymous("8"))), 163 length(A, B). 164'CHRlenlist_2'(lenlist(A, B), C, D, E) :- 165 'CHRlenlist_2__11'(lenlist(A, B), C, D, E). 166:- set_flag('CHRlenlist_2' / 4, leash, notrace). 167:- current_macro('CHRlenlist_2' / 4, _5181, _5182, _5183) -> true ; define_macro('CHRlenlist_2' / 4, tr_chr / 2, [write]). 168'CHRlenlist_2__11'(A, B, C, D) :- 169 'CHRlenlist_2__12'(A, B, C, D). 170:- set_flag('CHRlenlist_2__11' / 4, leash, notrace). 171'CHRlenlist_2__12'(lenlist(A, B), C, D, E) :- 172 ( 173 'CHRvar'(C) 174 -> 175 'CHRdelay'([C, lenlist(A, B)], 'CHRlenlist_2'(lenlist(A, B), C, D, E)) 176 ; 177 true 178 ). 179:- set_flag('CHRlenlist_2__12' / 4, leash, notrace). 180 181:- getval(variable_names_flag, Val), set_flag(variable_names, Val). 182