benfleis
12/27/2018, 11:20 AM// emulate clojure's head/tail splitting in recursive loops
fun <T> Sequence<T>.firstRest(): Pair<T, Sequence<T>> {
return this@firstRest.iterator().let {
if (!it.hasNext())
throw NoSuchElementException("Sequence is empty.")
Pair(it.next(), it.asSequence())
}
}
fun testFirstRest() {
val sOne = listOf(1, 2, 3).asSequence()
val (one, sTwo) = sOne.firstRest()
val (two, sThree) = sTwo.firstRest()
val (three, sEnd) = sThree.firstRest()
assert(one == 1)
assert(two == 2)
assert(three == 3)
assert(sEnd.none())
}