scanRight<T, B> function

ImmutableList<B> Function(ImmutableList<T>) Function(B combine(B, T)) scanRight<T, B>(
  1. B initial
)

Scans a list from the right, producing a new list with intermediate results.

Example:

final list = ImmutableList<int>([1, 2, 3]);
final scanResult = scanRight<int, int>(0)((item, acc) => item + acc)(list);
print(scanResult.items);  // Outputs: (6, 5, 3, 0)

Implementation

ImmutableList<B> Function(ImmutableList<T>) Function(B Function(B, T) combine)
    scanRight<T, B>(B initial) {
  return (B Function(B, T) combine) {
    return (ImmutableList<T> list) {
      List<B> results = [initial];
      B accumulator = initial;

      for (T item in list.items.reversed) {
        accumulator = combine(accumulator, item);
        results.add(accumulator);
      }

      return ImmutableList(results.reversed.toList());
    };
  };
}