Kotlinでは、浮動少数やBigIntegerなどはそのままだとfor文に入れて回すことができません。
こういったものはgenerateSequence
を使ってシーケンスにすることで、for文のように回すことができます。
やり方
以下はgenerateSequence
を使って階乗を実装したものです。
generateSequence{ }
内の処理が値の更新と終了条件の判定です。takeIf { }
内が終了条件です。
fun fact(n: BigInteger): BigInteger{ var i = n var ans = BigInteger.ONE generateSequence { (i--).takeIf { i > BigInteger.ZERO } }.forEach { ans *= it } return ans }
注釈
あくまで「のように」であって、sequence
関連は奥深く、多くの使い道があります。
qiita.com