* Add documentation to modules, and some constants and types Signed-off-by: Nick Cameron <nrc@ncameron.org> * Improve the language reference Signed-off-by: Nick Cameron <nrc@ncameron.org> --------- Signed-off-by: Nick Cameron <nrc@ncameron.org>
54 lines
1.9 KiB
Markdown
54 lines
1.9 KiB
Markdown
---
|
|
title: "Arithmetic and logic"
|
|
excerpt: "Documentation of the KCL language for the Zoo Design Studio."
|
|
layout: manual
|
|
---
|
|
|
|
KCL supports the usual arithmetic operators on numbers and logic operators on booleans:
|
|
|
|
| Operator | Meaning |
|
|
|----------|---------|
|
|
| `+` | Addition |
|
|
| `-` | Subtraction or unary negation |
|
|
| `*` | Multiplication |
|
|
| `/` | Division |
|
|
| `%` | Modulus aka remainder |
|
|
| `^` | Power, e.g., `x ^ 2` means `x` squared |
|
|
| `&` | Logical 'and' |
|
|
| `|` | Logical 'or' |
|
|
| `!` | Unary logical 'not' |
|
|
|
|
KCL also supports comparsion operators which operate on numbers and produce booleans:
|
|
|
|
| Operator | Meaning |
|
|
|----------|---------|
|
|
| `==` | Equal |
|
|
| `!=` | Not equal |
|
|
| `<` | Less than |
|
|
| `>` | Greater than |
|
|
| `<=` | Less than or equal |
|
|
| `>=` | Greater than or equal |
|
|
|
|
Arithmetics and logic expressions can be arbitrairly combined with the usual rules of associativity and precedence, e.g.,
|
|
|
|
```
|
|
myMathExpression = 3 + 1 * 2 / 3 - 7
|
|
```
|
|
|
|
You can also nest expressions in parenthesis:
|
|
|
|
```
|
|
myMathExpression = 3 + (1 * 2 / (3 - 7))
|
|
```
|
|
|
|
KCL numbers are implemented using [floating point numbers](https://en.wikipedia.org/wiki/Floating-point_arithmetic). This means that there are occasionally representation and rounding issues, and some oddities such as supporting positive and negative zero.
|
|
|
|
Some operators can be applied to other types:
|
|
|
|
- `+` can be used to concatenate strings, e.g., `'hello' + ' ' + 'world!'`
|
|
- Unary `-` can be used with planes or line-like objects such as axes to produce an object with opposite orientation, e.g., `-XY` is a plain which is aligned with `XY` but whose normal aligns with the negative Z axis.
|
|
- The following operators can be used with solids as shorthand for CSG operations:
|
|
- `+` or `|` for [`union`](/docs/kcl-std/union).
|
|
- `-` for [`subtract`](/docs/kcl-std/subtract).
|
|
- `&` for [`intersect`](/docs/kcl-std/intersect)
|