cartesianProduct<T> function

Iterable<Iterable<T>> cartesianProduct<T>(
  1. Iterable<Iterable<T>> lists
)

Implementation

Iterable<Iterable<T>> cartesianProduct<T>(Iterable<Iterable<T>> lists) sync* {
  if (lists.length == 1) {
    yield* lists.first.map((e) => [e]);
    return;
  }

  for (final element in lists.first) {
    yield* cartesianProduct(lists.skip(1)).map((e) => [element, ...e]);
  }
}