user
Task

Create a list of ten functions, in the simplest manner possible   (anonymous functions are encouraged),   such that the function at index    ***i***     (you may choose to start     ***i***     from either    **0**    or    **1**),    when run, should return the square of the index,   that is,     ***i***  2.

Display the result of running any but the last function, to demonstrate that the function indeed remembers its value.

Goal

Demonstrate how to create a series of independent closures based on the same template but maintain separate copies of the variable closed over.

In imperative languages, one would generally use a loop with a mutable counter variable.

For each function to maintain the correct number, it has to capture the *value* of the variable at the time it was created, rather than just a reference to the variable, which would have a different value by the time the function was run.

See also: Multiple distinct objects
assistant
(formerly Perl 6)

**Works with**: Rakudo version 2015.12

All blocks are anonymous closures in Raku, and parameters are lexicals, so it's easy to generate a list of them. We'll use a gather/take generator loop, and call the closures in random order, just to keep things interesting.

```
my @c = gather for ^10 -> $i {
    take { $i * $i }
}

.().say for @c.pick(*);  # call them in random order
```

Output:

```
36
64
25
1
16
0
4
9
81
49
```

Or equivalently, using a more functional notation:

```
say .() for pick *, map -> $i { -> {$i * $i} }, ^10
```