diff --git a/build.sbt b/build.sbt index 9fbd4db..72df2d9 100644 --- a/build.sbt +++ b/build.sbt @@ -1,6 +1,6 @@ name := "Sequencer" -version := "1.4.0" +version := "1.5.0" organization := "com.worldwidemann" diff --git a/src/main/scala/com/worldwidemann/sequencer/ExpressionLibrary.scala b/src/main/scala/com/worldwidemann/sequencer/ExpressionLibrary.scala index 47eb38d..b66e3eb 100644 --- a/src/main/scala/com/worldwidemann/sequencer/ExpressionLibrary.scala +++ b/src/main/scala/com/worldwidemann/sequencer/ExpressionLibrary.scala @@ -46,10 +46,12 @@ class ExpressionLibrary(configuration: Configuration) { private val SUBTRACT = BinaryInfixOperator("-", (x, y) => x - y) private val MULTIPLY = BinaryInfixOperator("*", (x, y) => x * y) private val DIVIDE = BinaryInfixOperator("/", (x, y) => x / y) + private val MODULO = BinaryPrefixOperator("Mod", (x, y) => x % y) private val POWER = BinaryInfixOperator("^", (x, y) => math.pow(x, y)) private val MAX = BinaryPrefixOperator("Max", (x, y) => math.max(x, y)) private val MIN = BinaryPrefixOperator("Min", (x, y) => math.min(x, y)) - private val standardFunctions = Array[Expression](NEGATE, SQRT, ABS, SIGN, FLOOR, CEILING, ROUND, ADD, SUBTRACT, MULTIPLY, DIVIDE, POWER, MAX, MIN) + private val standardFunctions = Array[Expression](NEGATE, SQRT, ABS, SIGN, FLOOR, CEILING, ROUND, + ADD, SUBTRACT, MULTIPLY, DIVIDE, MODULO, POWER, MAX, MIN) private val previousElements = (1 to configuration.recurrenceDepth).map(PreviousElement(_)).toArray[Expression] @@ -130,6 +132,8 @@ class ExpressionLibrary(configuration: Configuration) { ROUND -> integerExpressions, // 1*x = x*1 = x MULTIPLY -> Array[Expression](ONE), + // 1%x = 1, x%1 = 0 + MODULO -> (Array[Expression](ONE) ++ nonIntegerExpressions), // 1^x = 1, x^1 = x POWER -> Array[Expression](ONE), FACTORIAL -> (integers ++ nonIntegerExpressions), diff --git a/src/main/scala/com/worldwidemann/sequencer/SequencerRunner.scala b/src/main/scala/com/worldwidemann/sequencer/SequencerRunner.scala index 8f66c89..adfea3f 100644 --- a/src/main/scala/com/worldwidemann/sequencer/SequencerRunner.scala +++ b/src/main/scala/com/worldwidemann/sequencer/SequencerRunner.scala @@ -19,7 +19,7 @@ import scopt.OptionParser object SequencerRunner { def main(args: Array[String]) { - println("Sequencer 1.4.0 (https://github.com/p-e-w/sequencer)\n") + println("Sequencer 1.5.0 (https://github.com/p-e-w/sequencer)\n") // Suppress annoying Symja console output (idea from http://stackoverflow.com/a/8363580). // This is a very brittle solution. In particular, if we do not use the Console stream