Previously it only took Array of Number and could only return Sketch. Now it has been unshackled from the chains of poor type signatures.
70 lines
90 KiB
Markdown
70 lines
90 KiB
Markdown
---
|
|
title: "reduce"
|
|
excerpt: "Take a starting value. Then, for each element of an array, calculate the next value,"
|
|
layout: manual
|
|
---
|
|
|
|
Take a starting value. Then, for each element of an array, calculate the next value,
|
|
|
|
using the previous value and the element.
|
|
|
|
```js
|
|
reduce(array: [KclValue], start: KclValue, reduce_fn: FunctionParam) -> KclValue
|
|
```
|
|
|
|
|
|
### Arguments
|
|
|
|
| Name | Type | Description | Required |
|
|
|----------|------|-------------|----------|
|
|
| `array` | [`[KclValue]`](/docs/kcl/types/KclValue) | | Yes |
|
|
| `start` | [`KclValue`](/docs/kcl/types/KclValue) | A memory item. | Yes |
|
|
| `reduce_fn` | `FunctionParam` | | Yes |
|
|
|
|
### Returns
|
|
|
|
[`KclValue`](/docs/kcl/types/KclValue) - A memory item.
|
|
|
|
|
|
### Examples
|
|
|
|
```js
|
|
fn decagon = (radius) => {
|
|
step = 1 / 10 * tau()
|
|
sketch001 = startSketchAt([cos(0) * radius, sin(0) * radius])
|
|
return reduce([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], sketch001, (i, sg) => {
|
|
x = cos(step * i) * radius
|
|
y = sin(step * i) * radius
|
|
return lineTo([x, y], sg)
|
|
})
|
|
}
|
|
decagon(5.0)
|
|
|> close(%)
|
|
```
|
|
|
|

|
|
|
|
```js
|
|
array = [1, 2, 3]
|
|
sum = reduce(array, 0, (i, result_so_far) => {
|
|
return i + result_so_far
|
|
})
|
|
assertEqual(sum, 6, 0.00001, "1 + 2 + 3 summed is 6")
|
|
```
|
|
|
|

|
|
|
|
```js
|
|
fn add = (a, b) => {
|
|
return a + b
|
|
}
|
|
fn sum = (array) => {
|
|
return reduce(array, 0, add)
|
|
}
|
|
assertEqual(sum([1, 2, 3]), 6, 0.00001, "1 + 2 + 3 summed is 6")
|
|
```
|
|
|
|

|
|
|
|
|