<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div dir="ltr"><br></div><div dir="ltr">On Jan 21, 2019, at 10:10 AM, Tony Garnock-Jones <<a href="mailto:tonyg@leastfixedpoint.com">tonyg@leastfixedpoint.com</a>> wrote:<br><br></div><blockquote type="cite"><div dir="ltr"><span>Hi Stef,</span><br><span></span><br><span>On 1/21/19 5:47 PM, Stéphane Rollandin wrote:</span><br><blockquote type="cite"><span>Is it expected that</span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>    | blocks x |</span><br></blockquote><blockquote type="cite"><span>    blocks := OrderedCollection new.</span><br></blockquote><blockquote type="cite"><span>    (1 to: 3) do: [:n |</span><br></blockquote><blockquote type="cite"><span>        x := n.</span><br></blockquote><blockquote type="cite"><span>        blocks add: [Transcript showln: x]].</span><br></blockquote><blockquote type="cite"><span>    blocks do: #value</span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>prints 3 three times, while</span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>    | blocks |</span><br></blockquote><blockquote type="cite"><span>    blocks := OrderedCollection new.</span><br></blockquote><blockquote type="cite"><span>    (1 to: 3) do: [:n |</span><br></blockquote><blockquote type="cite"><span>        | x |</span><br></blockquote><blockquote type="cite"><span>        x := n.</span><br></blockquote><blockquote type="cite"><span>        blocks add: [Transcript showln: x]].</span><br></blockquote><blockquote type="cite"><span>    blocks do: #value</span><br></blockquote><blockquote type="cite"><span></span><br></blockquote><blockquote type="cite"><span>prints 1, 2, 3 ?</span><br></blockquote><span></span><br><span>I would expect to see that, yes. I expect the first snippet to update a</span><br><span>single `x`-variable, while the second snippet creates (and then</span><br><span>immediately updates) a fresh `x`-variable within the scope of each</span><br><span>execution of the block argument to `#do:`.</span><br><span></span><br><span>I'd also expect</span><br><span></span><br><span>     | blocks |</span><br><span>     blocks := OrderedCollection new.</span><br><span>     (1 to: 3) do: [:n | blocks add: [Transcript showln: n]].</span><br><span>     blocks do: #value</span><br><span></span><br><span>to print 1, 2, 3, since I would expect a fresh `n` for each invocation</span><br><span>of the `#do:` block.</span><br></div></blockquote><div><br></div>As should<div><div dir="ltr"><font color="#000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);">    | blocks |<br>    blocks := OrderedCollection new.<br>    1 to: 3 do: [:n | blocks add: [Transcript showln: n]].<br>    blocks do: #value</span></font></div><div><br></div>and</div><div><br></div><div><div dir="ltr"><font color="#000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);">    ((1 to: 3) collect: [:n | [Transcript showln: n]]) do: #value</span></font></div><div dir="ltr"><font color="#000000"><span style="caret-color: rgb(0, 0, 0); background-color: rgba(255, 255, 255, 0);"><br></span></font></div><blockquote type="cite"><div dir="ltr"><span></span><br><span>But then my mind has been poisoned by decades of exposure to high levels</span><br><span>of ambient Scheme.</span><br></div></blockquote><div><br></div>Purified and elevated ;-)</div><div><br></div><div>Closures are closures :-)</div><div><br><blockquote type="cite"><div dir="ltr"><span></span><span>Regards,</span><br><span>  Tony</span><br></div></blockquote></div></body></html>