59 lines
1 KiB
Text
59 lines
1 KiB
Text
display(list l)
|
|
{
|
|
for (integer i, record r in l) {
|
|
text u, v;
|
|
|
|
o_text(i ? ", {" : "{");
|
|
for (u in r) {
|
|
o_(v, u);
|
|
v = ", ";
|
|
}
|
|
o_text("}");
|
|
}
|
|
|
|
o_text("\n");
|
|
}
|
|
|
|
intersect(record r, record u)
|
|
{
|
|
trap_q(r_vcall, r, r_put, 1, record().copy(u), 0);
|
|
}
|
|
|
|
consolidate(list l)
|
|
{
|
|
for (integer i, record r in l) {
|
|
integer j;
|
|
|
|
j = i - ~l;
|
|
while (j += 1) {
|
|
if (intersect(r, l[j])) {
|
|
r.wcall(r_add, 1, 2, l[j]);
|
|
l.delete(i);
|
|
i -= 1;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
l;
|
|
}
|
|
|
|
R(...)
|
|
{
|
|
record r;
|
|
|
|
ucall(r_put, 1, r, 0);
|
|
|
|
r;
|
|
}
|
|
|
|
main(void)
|
|
{
|
|
display(consolidate(list(R("A", "B"), R("C", "D"))));
|
|
display(consolidate(list(R("A", "B"), R("B", "D"))));
|
|
display(consolidate(list(R("A", "B"), R("C", "D"), R("D", "B"))));
|
|
display(consolidate(list(R("H", "I", "K"), R("A", "B"), R("C", "D"),
|
|
R("D", "B"), R("F", "G", "K"))));
|
|
|
|
0;
|
|
}
|