Beyond This Documentation

Sometimes you need more power

“Real” RuleScript specifications use lots of epressions not explained in this documentation.

These expressions are from the Clojure programming language, which RuleScript sits on top of. Almost any Clojure expression can be used from within RuleScript (see below for a list of disallowed symbols). This allows RuleScript writers to be incredibly expressive, although there are a lot of new expressions to learn. Some especially usefuly ones are below.

The official Clojure cheatsheet is a great tool for learning new expressions and refreshing your memory about old ones.

Starting expressions

  • +, -, * (multiplication), and / (division) work like you’d expect.
  • min and max take the minimum and maximum, respectively, of the provided arguments.
  • and takes any number of values or expressions, and returns either the first false/nil value (called, amusingly, “falsy”), or else the final value. Answers the question, “Are all of these things true?”
  • or is similar; given values, return the first non-falsy (called “truthy”) value, or else the final value. Anwsers the question, “Are ANY of these things true?”
  • if takes the form (if test then else), where test is a boolean expression/value, then is the thing that will be returned if test is true, and else is the thing that will be returned if test is false.
  • map takes an expression and a sequence, and applies that expression to each element of the sequence. It returns a sequence of those results. For example, consider (map complete? some-elements).
  • filter, like map, takes an expression and a sequence, and applies the expression to each element of the sequence. However: the expression must return a boolean value, and filter returns the original values for which the expression is true.

Other expressions?

There are hundreds! In addition to the Clojure cheatsheet, you may wish to check out Clojure’s full API documentation. Pro tip: function names that end with ? are boolean expressions.