35 lines
1.6 KiB
HTML
35 lines
1.6 KiB
HTML
<html>
|
|
|
|
<head>
|
|
<object type="application/x-oleobject" classid="clsid:1e2a7bd0-dab9-11d0-b93a-00c04fc99f9e">
|
|
<param name="Keyword" value="Çàõâàò ïåðåìåííûõ â ëÿìáäà-âûðàæåíèè">
|
|
</object>
|
|
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
|
|
<title></title>
|
|
<link rel="StyleSheet" href="../../default.css">
|
|
</head>
|
|
|
|
<body>
|
|
<H1>Çàõâàò ïåðåìåííûõ â ëÿìáäà-âûðàæåíèè</H1>
|
|
<p><a href="lambdas.html">Ëÿìáäà-âûðàæåíèå</a> ìîæåò èñïîëüçîâàòü ïåðåìåííûå èç
|
|
âíåøíåãî êîíòåêñòà. Òàêèå ïåðåìåííûå íàçûâàþòñÿ çàõâà÷åííûìè ëÿìáäà-âûðàæåíèåì.</p>
|
|
<p><strong>Ïðèìåð 1.</strong> Çàõâàò ïåðåìåííîé â çàïðîñå Select.</p>
|
|
<blockquote><code><strong>begin</strong><br> <strong>var</strong> a :=
|
|
Seq(2,3,4);<br> <strong>var</strong> z := 1;<br> <strong>var</strong>
|
|
q := a.Select(x->x+z);<br> q.Println;<br> z := 2;<br>
|
|
q.Println;<br><strong>end</strong>.</code></blockquote>
|
|
<p>Çäåñü ëÿìáäà-âûðàæåíèå <code>x->x+z</code> çàõâàòûâàåò âíåøíþþ ïåðåìåííóþ z.
|
|
Âàæíî çàìåòèòü, ÷òî ïðè èçìåíåíèè çíà÷åíèÿ ïåðåìåííîé z çàïðîñ <code>
|
|
a.Select(x->x+z)</code>, õðàíÿùèéñÿ â ïåðåìåííîé q, âûïîëíÿåòñÿ ñ íîâûì
|
|
çíà÷åíèåì z.</p>
|
|
<p><strong>Ïðèìåð 2.</strong> Íàêîïëåíèå ñóììû âî âíåøíåé ïåðåìåííîé.</p>
|
|
<blockquote><code><strong>begin</strong><br> <strong>var</strong> sum :=
|
|
0;<br> <strong>var</strong> AddToSum: integer -> () := <strong>
|
|
procedure</strong> (x) -> <strong>begin</strong> sum += x; <strong>
|
|
end</strong>;<br><br> AddToSum(1);<br> AddToSum(3);<br>
|
|
AddToSum(5);<br><br> writeln(sum); <br><strong>end</strong>.</code></blockquote>
|
|
<p> </p>
|
|
</body>
|
|
|
|
</html>
|