Kotlin unfoldr
fun <T,R> unfoldRight(f: (T) -> Pair<R, T>?, b: T): List<R> {
val maybePair: Pair<R, T>? = f(b)
return if ( maybePair == null) {
listOf()
} else {
listOf(maybePair.first) + unfoldRight(f, maybePair.second)
}
}