2015年6月3日水曜日

scala関数型デザイン&プログラミング P107

def nonNegativeLessThan(n:Int):Rand[Int]=
 map(nonNegativeInt) { i=>
    val  mod = i % n
   if (i + (n-1) -mod >= 0) mod else nonNegaativeLessThan(n)(???)
 i+(n-1)-mod>=0がnの最大の倍数より大きいことを意味するといっているが、わかりにくい。
i-modは、nの倍数だが、これが、最大の倍数でないならば、これにn-1をたしても、32ビット整数におさまる。(つまり>=0ということか?)しかし、最大の倍数ならば、これにn-1を足すと、<0になるということなんだろうか?そして、<0ということは、i-modが最大の倍数なので、iが最大の倍数より大きい数であり、nonNegativeLessThanをリトライする。と理解したがいいんだろうか?

0 件のコメント:

コメントを投稿