Grow - Built-in Operators and Functions


Similarity to C

In general, the operators and functions in our program are like in the C programming language. There are slight differences though.
Since grow's parser handle all numbers as real numbers, the operators and functions input and output paramaters are all real numbers (one can think of it as type coercion to real numbers). Examples:
  1. Boolean return values true and false are represented as 1.0 and 0.0, respectively. Boolean input values are 0.0 for false and any other value for true. Hence the binary operators operate and return these values.
  2. A power operator (^) exists (x^y == pow(x,y)).
  3. inside() and outside() boolean functions return true iff the turtle is inside or outside, respectively, the surrounding object.
  4. min() and max() accept 1 or more parameters (min(3,2,4)==2).
Here is a list of all built-in operators:

Boolean Operators

Symbol Arity Operation
|| Infix binary Boolean or
&& Infix binary Boolean and
! Unary Boolean not

Arithmetic Operators

Symbol Arity Operation
+ Infix binary or unary Plus
- Infix binary or unary Minus
* Infix binary Multiplication
/ Infix binary Division
^ Infix binary (right associative) Power

Comparison Operators

Symbol Arity Operation
< Infix binary Less than
> Infix binary Greater than
<= Infix binary Less than / equal to
>= Infix binary Greater than / equal to
== Infix binary Equal to
!= Infix binary Not equal to
 

Arithmetic Functions

Symbol Arity Operation
exp 1 parameter Exponent
ln 1 parameter Natural logarithm
sqr 1 parameter Square
sqrt 1 parameter Square root
min at least 1 parameter Min
max at least 1 parameter Max

Trigonometric Functions

The input to all of these functions is in radians (like in C).
 
Symbol Arity Operation
sin 1 parameter Sine
cos 1 parameter Cosine
tan 1 parameter Tangent
asin 1 parameter Arc sine
acos 1 parameter Arc cosine
atan 1 parameter Arc tangent

Geometric Functions

Note that inside() and outside() result is not defined for queries on the boundary of the surrounding object, or queries that are close to a boundary by more than Irit's epsilon (typical value is 1E-5). In such cases the result is deterministic but may be true for some places on the boundary and false for others. This is not a major drawback of grow, because the accuracy is not very important for the plants' topiary.
 
Symbol Arity Operation
inside 3 parameters Returns 1.0 if (x,y,z) is inside the surrounding object, otherwise 0.0.
outside 3 parameters The boolean not of inside.