I've just finished exercise #1 from: knowing.net. Please feel free to critique this code, I am serious about learning Scala and getting introduced to members of the community.
Calculator.scala
package activeactive class Calculator { def main(args:Array[String]): Double = eval(args.toList) def eval(args:List[String]): Double = args match { case null => throw new IllegalArgumentException( "args cannot be null-valued") case Nil => throw new IllegalArgumentException( "You must provide a function name as the first argument") case "sum" :: rest => sum(convertList(rest)) case "prod" :: rest => product(convertList(rest)) case "mean" :: rest => mean(convertList(rest)) case "sqrt" :: rest => sqrt(convertList(rest)) case _ => throw new IllegalArgumentException( "invalid function name. Use 'sum', 'prod', 'mean', or 'sqrt'.") } def convertList(list: List[String]): List[Double] = list match { case Nil => Nil case x :: subList => x.toDouble :: convertList(subList) } def sum(list: List[Double]) = (0D :: list) reduceLeft ((x, y) => x+y) def product(list: List[Double]) = (1D :: list) reduceLeft ((x, y) => x*y) def mean(list: List[Double]) = list match { case Nil => throw new IllegalArgumentException( "The mean function requires at least one operand") case _ => sum(list) / list.size } def sqrt(list: List[Double]) = if (sum(list) <= 0) throw new IllegalArgumentException( "the input values '" + list.toString + "' resulted in a sum <= zero.") else if (sum(list) == 1D) 1D else Math.sqrt(sum(list)) }EDIT: updated knowing.net link.
Comments