Петля Котлина с нерегулярными ступенями

Я пытаюсь перевести Java для выражения в Kotlin, который производит эту последовательность:

1,2,4,8,16,32,64

Это код Java:

for(int i = 1; i < 100; i = i + i) { System.out.printf("%d,", i); } 

Единственный способ, который я нашел, чтобы перевести это в Котлин:

 var i = 1 while (i < 100) { print("$i,") i += i } 

Я попытался использовать выражения шагов, но это, похоже, не работает. Есть ли способ выразить этот тип последовательности более элегантно в Котлине?

Я знаю, что вы можете использовать такой код, используя Kotlin + Java 9:

 Stream.iterate(1, { it <= 100 }) { it!! + it }.forEach { print("$it,") } 

Но это зависит от Java-библиотек, и я бы предпочел родственные библиотеки Kotlin.

Вы можете использовать функцию generateSequence для создания бесконечной последовательности, а затем использовать takeWhile чтобы ограничить ее определенным значением, а затем использовать forEach вместо takeWhile конструкции для обработки каждой итерации:

generateSequence(1) { it + it }.takeWhile { it < 100 }.forEach { print("$it,") }