I am a newbie in functional programming. I just tried solving the following problem :
[ a rough specification ] e.g.1: dividend : {3,5,9} divisor : {2,2} radix = 10 ans (remainder) : {7} Procedure : dividend = 3*10^2+5*10^1+9*10^0 = 359 similarly, divisor = 22 so 359 % 22 = 7 e.g.2: dividend : {555,555,555,555,555,555,555,555,555,555} divisor: {112,112,112,112,112,112,112,112,112,112} radix = 1000 ans (remainder) : {107,107,107,107,107,107,107,107,107,107} My solution to this problem is :
object Tornedo { def main(args: Array[String]) { val radix: BigInt = 1000 def buildNum(segs: BigInt*) = (BigInt(0) /: segs.toList) { _ * radix + _ } val dividend = buildNum(555,555,555,555,555,555,555,555,555,555) val divisor = buildNum(112,112,112,112,112,112,112,112,112,112) var remainder = dividend % divisor var rem = List[BigInt]() while(remainder > 0) { rem = (remainder % radix) :: rem remainder /= radix } println(rem) } } Although I am pretty satisfied with this code I'd like to know how to eliminate the while loop & two mutable variables and make this code more functional.
Any help would be greatly appreciated.
Thanks. :)
unfoldfunction, but Scala doesn't have one. Perhaps Scalaz do.