diff --git a/docs/kcl-lang/arrays.md b/docs/kcl-lang/arrays.md new file mode 100644 index 000000000..01add0efc --- /dev/null +++ b/docs/kcl-lang/arrays.md @@ -0,0 +1,32 @@ +--- +title: "Arrays and ranges" +excerpt: "Documentation of the KCL language for the Zoo Design Studio." +layout: manual +--- + +Arrays are sequences of values. + +Arrays can be written out as *array literals* using a sequence of expressions surrounded by square brackets, e.g., `['hello', 'world']` is an array of strings, `[x, x + 1, x + 2]` is an array of numbers (assuming `x` is a number), `[]` is an empty array, and `['hello', 42, true]` is a mixed array. + +A value in an array can be accessed by indexing using square brackets where the index is a number, for example, `arr[0]`, `arr[42]`, `arr[i]` (where `arr` is an array and `i` is a (whole) number). + +There are some useful functions for working with arrays in the standard library, see [std::array](/docs/kcl-std/modules/std-array) for details. + +## Array types + +Arrays have their own types: `[T]` where `T` is the type of the elements of the array, for example, `[string]` means an array of `string`s and `[any]` means an array of any values. + +Array types can also include length information: `[T; n]` denotes an array of length `n` (where `n` is a number literal) and `[T; 1+]` denotes an array whose length is at least one (i.e., a non-empty array). E.g., `[string; 1+]` and `[number(mm); 3]` are valid array types. + +## Ranges + +Ranges are a succinct way to create an array of sequential numbers. The syntax is `[start .. end]` where `start` and `end` evaluate to whole numbers (integers). Ranges are inclusive of the start and end. The end must be greater than the start. Examples: + +```kcl,norun +[0..3] // [0, 1, 2, 3] +[3..10] // [3, 4, 5, 6, 7, 8, 9, 10] +x = 2 +[x..x+1] // [2, 3] +``` + +The units of the start and end numbers must be the same and the result inherits those units. diff --git a/docs/kcl-lang/index.md b/docs/kcl-lang/index.md index c504d57ce..b6caa08b2 100644 --- a/docs/kcl-lang/index.md +++ b/docs/kcl-lang/index.md @@ -14,6 +14,7 @@ things in a more tutorial fashion. See also our documentation of the [standard l * [Values and types](/docs/kcl-lang/types) * [Numeric types and units](/docs/kcl-lang/numeric) * [Functions](/docs/kcl-lang/functions) +* [Arrays and ranges](/docs/kcl-lang/arrays) * [Projects and modules](/docs/kcl-lang/modules) * [Attributes](/docs/kcl-lang/attributes) * [Importing geometry from other CAD systems](/docs/kcl-lang/foreign-imports) diff --git a/docs/kcl-lang/types.md b/docs/kcl-lang/types.md index b82e79068..5e2c08bd0 100644 --- a/docs/kcl-lang/types.md +++ b/docs/kcl-lang/types.md @@ -19,18 +19,6 @@ myBool = false Currently you cannot redeclare a constant. -## Arrays - -An array is defined with `[]` braces. What is inside the brackets can -be of any type. For example, the following is completely valid: - -``` -myArray = ["thing", 2, false] -``` - -If you want to get a value from an array you can use the index like so: -`myArray[0]`. - ## Objects