RosettaCodeData/Task/Set-consolidation/Aime/set-consolidation.aime
2019-09-12 10:33:56 -07:00

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;
}