blob: 60168b1f581a8e7442897aea9d6516d5fc5e2271 [file] [log] [blame]
List<List<A>> perms<A>(List<A> list) => switch (list) {
<A>[] || <A>[_] => [list],
<A>[var x, ...var xs] => [
for (var i = 0; i < list.length; i++)
for (var perm in perms(xs)) [...perm.take(i), x, ...perm.skip(i)],
],
};
List<List<A>> subs<A>(List<A> list) => switch (list) {
<A>[] => [],
<A>[var x, ...var xs] => [
for (var ys in subs(xs)) ...[
[x] + ys,
ys,
],
[x],
],
};
bool equals<A>(List<A> a, List<A> b) => switch ((a, b)) {
(<A>[], <A>[]) => true,
(<A>[_, ...], <A>[]) => false,
(<A>[], <A>[_, ...]) => false,
(<A>[var l, ...var ls], <A>[var r, ...var rs]) => l == r && equals(ls, rs),
};
void main() {}