With imperative programs, we have to play compiler to see what is happening. Here, we start with a `sum` of `0`. Next, we iterate through the range from 1 to 10. Each time through the loop, we add the corresponding value in the range. Then we print it out.
With imperative programs, we have to play compiler to see what is happening. Here, we start with a `sum` of `0`. Next, we iterate through the range from 1 to 10. Each time through the loop, we add the corresponding value in the range. Then we print it out.
| `i` | `sum` |
| `i` | `sum` |
| --- | ----- |
|:---:|:-----:|
| 1 | 1 |
| 1 | 1 |
| 2 | 3 |
| 2 | 3 |
| 3 | 6 |
| 3 | 6 |
| 4 | 10 |
| 4 | 10 |
| 5 | 15 |
| 5 | 15 |
| 6 | 21 |
| 6 | 21 |
| 7 | 28 |
| 7 | 28 |
| 8 | 36 |
| 8 | 36 |
| 9 | 45 |
| 9 | 45 |
| 10 | 55 |
| 10 | 55 |
This is how most of us start out programming. We learn that a program is a set of steps.
This is how most of us start out programming. We learn that a program is a set of steps.
@ -40,14 +40,14 @@ Whoa! This is really different! What's going on here? Remember that with declara
Here, we are composing functions of addition (this closure: `|a, b| a + b)`) with a range from 1 to 10. The `0` is the starting point, so `a` is `0` at first. `b` is the first element of the range, `1`. `0 + 1 = 1` is the result. So now we `fold` again, with `a = 1`, `b = 2` and so `1 + 2 = 3` is the next result. This process continues until we get to the last element in the range, `10`.
Here, we are composing functions of addition (this closure: `|a, b| a + b)`) with a range from 1 to 10. The `0` is the starting point, so `a` is `0` at first. `b` is the first element of the range, `1`. `0 + 1 = 1` is the result. So now we `fold` again, with `a = 1`, `b = 2` and so `1 + 2 = 3` is the next result. This process continues until we get to the last element in the range, `10`.