Search code examples
scalalistapifoldleft

Scala - Scanleft, returning values within iterations without using it in a next turn


I have a list

what I would like to do is

def someRandomMethod(...): ... = {
  val list = List(1, 2, 3, 4, 5)
  if(list.isEmpty) return list
  list.differentScanLeft(list.head)((a, b) => {
     a * b
  })
}

which returns List(1, 2, 6, 12, 20) rather than List(1, 2, 6, 24, 120)

Is there such API?

Thank you, Cosmir


Solution

  • scan is not really the right method for this, you want to use sliding to generate a list of adjacent pairs of values:

    (1::list).sliding(2).map(l => l(0)*l(1))
    

    More generally, it is sometimes necessary to pass data on to the next iteration when using scan. The standard solution to this is to use a tuple (state, ans) and then filter out the state with another map at the end.