code: public List<T> scanRight(BinaryOperator<T> accumulator) {
          return toListAndThen(list -> {
              for (int i = list.size() - 2; i >= 0; i--) {
                  list.set(i, accumulator.apply(list.get(i), list.get(i + 1)));
              }
              return list;
          });
      }
docs: Produces a collection containing cumulative results of applying the
  accumulation function going right to left.
  
  <p>
  This is a terminal operation.
  
  <p>
  The result {@link List} is guaranteed to be mutable.
  
  <p>
  For parallel stream it's not guaranteed that accumulator will always be
  executed in the same thread.
  
  <p>
  This method cannot take all the advantages of parallel streams as it must
  process elements strictly right to left.
  
  @param accumulator a <a
  href="package-summary.html#NonInterference">non-interfering </a>,
  <a href="package-summary.html#Statelessness">stateless</a>
  function for incorporating an additional element into a result
  @return the {@code List} where the last element is the last element of
  this stream and every predecessor element is the result of
  applying accumulator function to the corresponding stream element
  and the next list element. The resulting list is one element
  longer than this stream.
  @see #scanLeft(BinaryOperator)
  @see #foldRight(BinaryOperator)
  @since 0.4.0