Closures/Value capture: Difference between revisions

Content added Content deleted
(Added zkl)
No edit summary
Line 18: Line 18:
<lang Axiom>[1,4,9,16,25,36,49,64,81,100]
<lang Axiom>[1,4,9,16,25,36,49,64,81,100]
Type: List(Integer)</lang>
Type: List(Integer)</lang>

=={{header|Babel}}==

<lang babel>((main {
{ iter
1 take bons 1 take
dup cp
{*} cp
3 take
append }
10 times
collect !
{eval %d nl <<} each }))</lang>

This program produces the following output:

<lang babel>
((main {
{ iter
1 take bons 1 take
dup cp
{*} cp
3 take
append }
10 times
collect !
{eval %d nl <<} each })
</lang>

This program produces the following output:

<lang babel>100
81
64
49
36
25
16
9
4
1</lang>

Essentially, a function has been constructed for each value to be squared (10 down to 1). The cp operator ensures that we generate a fresh copy of the number to be squared, as well as the code for multiplying, {*}. In the final each loop, we eval each of the constructed functions and output the result.


=={{header|C}}==
=={{header|C}}==