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