
commonMain.space.kscience.kmath.misc.cumulative.kt Maven / Gradle / Ivy
package space.kscience.kmath.misc
import space.kscience.kmath.operations.Space
import space.kscience.kmath.operations.invoke
import kotlin.jvm.JvmName
/**
* Generic cumulative operation on iterator.
*
* @param T the type of initial iterable.
* @param R the type of resulting iterable.
* @param initial lazy evaluated.
*/
public inline fun Iterator.cumulative(initial: R, crossinline operation: (R, T) -> R): Iterator =
object : Iterator {
var state: R = initial
override fun hasNext(): Boolean = [email protected]()
override fun next(): R {
state = operation(state, [email protected]())
return state
}
}
public inline fun Iterable.cumulative(initial: R, crossinline operation: (R, T) -> R): Iterable =
Iterable { [email protected]().cumulative(initial, operation) }
public inline fun Sequence.cumulative(initial: R, crossinline operation: (R, T) -> R): Sequence =
Sequence { [email protected]().cumulative(initial, operation) }
public fun List.cumulative(initial: R, operation: (R, T) -> R): List =
iterator().cumulative(initial, operation).asSequence().toList()
//Cumulative sum
/**
* Cumulative sum with custom space
*/
public fun Iterable.cumulativeSum(space: Space): Iterable =
space { cumulative(zero) { element: T, sum: T -> sum + element } }
@JvmName("cumulativeSumOfDouble")
public fun Iterable.cumulativeSum(): Iterable = cumulative(0.0) { element, sum -> sum + element }
@JvmName("cumulativeSumOfInt")
public fun Iterable.cumulativeSum(): Iterable = cumulative(0) { element, sum -> sum + element }
@JvmName("cumulativeSumOfLong")
public fun Iterable.cumulativeSum(): Iterable = cumulative(0L) { element, sum -> sum + element }
public fun Sequence.cumulativeSum(space: Space): Sequence =
space { cumulative(zero) { element: T, sum: T -> sum + element } }
@JvmName("cumulativeSumOfDouble")
public fun Sequence.cumulativeSum(): Sequence = cumulative(0.0) { element, sum -> sum + element }
@JvmName("cumulativeSumOfInt")
public fun Sequence.cumulativeSum(): Sequence = cumulative(0) { element, sum -> sum + element }
@JvmName("cumulativeSumOfLong")
public fun Sequence.cumulativeSum(): Sequence = cumulative(0L) { element, sum -> sum + element }
public fun List.cumulativeSum(space: Space): List =
space { cumulative(zero) { element: T, sum: T -> sum + element } }
@JvmName("cumulativeSumOfDouble")
public fun List.cumulativeSum(): List = cumulative(0.0) { element, sum -> sum + element }
@JvmName("cumulativeSumOfInt")
public fun List.cumulativeSum(): List = cumulative(0) { element, sum -> sum + element }
@JvmName("cumulativeSumOfLong")
public fun List.cumulativeSum(): List = cumulative(0L) { element, sum -> sum + element }
© 2015 - 2025 Weber Informatics LLC | Privacy Policy