<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - AltLinux/Sisyphus/Alterator/internals/5</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5</link>
<description>History/revisions of FreeSource/AltLinux/Sisyphus/Alterator/internals/5</description>
<language>en-us</language>
<item>
<title>2008-03-06 15:22:17</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5/show?time=2008-03-06+15%3A22%3A17</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a name=".altlinux.sisyphus.alterator.internals.5" href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;internals&amp;nbsp;/&amp;nbsp;5&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5?time=2008-03-06+15%3A22%3A17">2008-03-06 15:22:17&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5">2008-03-06 15:22:49&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="action" style="float:right; width:250px">&lt;div class="action-content">Эта&amp;nbsp;страница была перенесена на&amp;nbsp;&lt;a href="http://altlinux.org/Alterator/internals/5" target="_blank" title="" class="outerlink">altlinux.org&lt;/a>. Текст на&amp;nbsp;freesource.info заморожен.&lt;/div>&lt;/div>&lt;br />
* параметры у&amp;nbsp;многоаргументных функций, суть локальные переменные со&amp;nbsp;всеми вытекающими последствиями:&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Параметры у&amp;nbsp;многоаргументных функций, суть локальные переменные со&amp;nbsp;всеми вытекающими последствиями:&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2007-03-30 05:31:19</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5/show?time=2007-03-30+05%3A31%3A19</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;internals&amp;nbsp;/&amp;nbsp;5&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5?time=2007-03-30+05%3A31%3A19">2007-03-30 05:31:19&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5?time=2008-03-06+15%3A22%3A17">2008-03-06 15:22:17&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent"> (define b&amp;nbsp;4)&lt;br />
 (define (g)&lt;br />
&lt;div class="indent">&lt;div class="indent">(write b)) ; мы&amp;nbsp;видим эту&amp;nbsp;переменную так&amp;nbsp;как g&amp;nbsp;сама определена внутри f&lt;br />
&lt;/div>&lt;/div> (g)&lt;br />
 (write a) ; мы&amp;nbsp;видим эту&amp;nbsp;переменную ибо&amp;nbsp;она в&amp;nbsp;охватывающем окружении&lt;br />
 (write b)) ; это&amp;nbsp;наша локальная переменная&lt;/div>
(write b) ; ошибка b&amp;nbsp;&amp;ndash; определена внутри f&amp;nbsp;и не&amp;nbsp;видна на&amp;nbsp;вышестоящем уровне.&lt;br />
&lt;div class="indent"> (define a&amp;nbsp;4)&lt;br />
 (write a))&lt;br />
 (write x))&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(define a&amp;nbsp;3)&lt;br />
(define (f)&lt;br />
&lt;div class="indent"> (define b&amp;nbsp;4)&lt;br />
 (define (g)&lt;br />
&lt;div class="indent">&lt;div class="indent">(write b)) ; мы&amp;nbsp;видим эту&amp;nbsp;переменную так&amp;nbsp;как g&amp;nbsp;сама определена внутри f&lt;br />
&lt;/div>&lt;/div> (g)&lt;br />
 (write a) ; мы&amp;nbsp;видим эту&amp;nbsp;переменную ибо&amp;nbsp;она в&amp;nbsp;охватывающем окружении&lt;br />
 (write b)) ; это&amp;nbsp;наша локальная переменная&lt;br />
&lt;/div>(write b) ; ошибка b&amp;nbsp;&amp;ndash; определена внутри f&amp;nbsp;и не&amp;nbsp;видна на&amp;nbsp;вышестоящем уровне.&lt;br />
(define a&amp;nbsp;4)&lt;br />
(write a))&lt;br />
(write x))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-10-31 17:14:59</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5/show?time=2006-10-31+17%3A14%3A59</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;internals&amp;nbsp;/&amp;nbsp;5&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5?time=2006-10-31+17%3A14%3A59">2006-10-31 17:14:59&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5?time=2007-03-30+05%3A31%3A19">2007-03-30 05:31:19&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(write b) ; ошибка b&amp;nbsp;&amp;ndash; определена внутри f&amp;nbsp;и не&amp;nbsp;видна на&amp;nbsp;вышестоящем уровне.&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(write b) ; ошибка a&amp;nbsp;&amp;ndash; определена внутри f&amp;nbsp;и не&amp;nbsp;видна на&amp;nbsp;вышестоящем уровне.&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-10-31 17:11:37</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5/show?time=2006-10-31+17%3A11%3A37</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;internals&amp;nbsp;/&amp;nbsp;5&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5?time=2006-10-31+17%3A11%3A37">2006-10-31 17:11:37&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5?time=2006-10-31+17%3A14%3A59">2006-10-31 17:14:59&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h5146-1">&lt;/a>&lt;h2>11 Локальные переменные&lt;/h2>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h5146-1">&lt;/a>&lt;h2>11 Опять про&amp;nbsp;Scheme: Локальные переменные&lt;/h2>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-07-20 00:55:37</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5/show?time=2005-07-20+00%3A55%3A37</link>
<description>&lt;div class="pageBefore">&lt;img src="http://freesource.info/wiki/images/z.gif" width="1" height="1" border="0" alt="" style="display:block" align="top" />&lt;/div>&lt;div class="page">
&lt;b>Сравнение версий &lt;a  href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5&amp;" class="">/Alt&amp;nbsp;Linux&amp;nbsp;/&amp;nbsp;Sisyphus&amp;nbsp;/&amp;nbsp;Alterator&amp;nbsp;/&amp;nbsp;internals&amp;nbsp;/&amp;nbsp;5&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5?time=2005-07-20+00%3A55%3A37">2005-07-20 00:55:37&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/5?time=2006-10-31+17%3A11%3A37">2006-10-31 17:11:37&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h5146-1">&lt;/a>&lt;h2>11 Опять про&amp;nbsp;Scheme: Локальные переменные&lt;/h2>
В&amp;nbsp;Scheme применяется привычный всем подход к&amp;nbsp;областям видимости переменных (так называемый Lexical Scope):&lt;br />
 * Переменные определённые внутри некоторой функции видны во&amp;nbsp;всех функциях,   определённых внутри данной, но&amp;nbsp;не видны вне&amp;nbsp;её.&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(define a&amp;nbsp;3)&lt;br />
(define (f)&lt;br />
&lt;div class="indent"> (define b&amp;nbsp;4)&lt;br />
 (define (g)&lt;br />
&lt;div class="indent">&lt;div class="indent">(write b)) ; мы&amp;nbsp;видим эту&amp;nbsp;переменную так&amp;nbsp;как g&amp;nbsp;сама определена внутри f&lt;br />
&lt;/div>&lt;/div> (g)&lt;br />
 (write a) ; мы&amp;nbsp;видим эту&amp;nbsp;переменную ибо&amp;nbsp;она в&amp;nbsp;охватывающем окружении&lt;br />
 (write b)) ; это&amp;nbsp;наша локальная переменная&lt;br />
&lt;/div>(write b) ; ошибка a&amp;nbsp;&amp;ndash; определена внутри f&amp;nbsp;и не&amp;nbsp;видна на&amp;nbsp;вышестоящем уровне.&lt;br />
(define a&amp;nbsp;4)&lt;br />
(write a))&lt;br />
(write x))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Продолжение истории...&lt;a name="h5146-1">&lt;/a>&lt;h2>3.  Первый модуль&lt;/h2>
Мы&amp;nbsp;уже узнали достаточно чтобы попробовать написать свой первый модуль для&amp;nbsp;alterator. Так&amp;nbsp;что не&amp;nbsp;будем медлить с&amp;nbsp;долгими рассказами, и&amp;nbsp;сразу же&amp;nbsp;приступим к&amp;nbsp;делу. Я&amp;nbsp;пока не&amp;nbsp;буду давать лишних комментариев, и&amp;nbsp;объяснять что&amp;nbsp;и&amp;nbsp;почему, просто смотрите как&amp;nbsp;это сделать и&amp;nbsp;всё ;)&lt;br />
Если формат backend'a покажется вам&amp;nbsp;несколько странным, то&amp;nbsp;объясню &amp;ndash; он&amp;nbsp;был изначально рассчитан на&amp;nbsp;существование в&amp;nbsp;виде модуля для&amp;nbsp;виртуальной файловой системы &amp;ndash; admfs. Сейчас она&amp;nbsp;не&amp;nbsp;используется &amp;ndash; а&amp;nbsp;формат остался ... может в&amp;nbsp;будущем мы&amp;nbsp;вернёмся к&amp;nbsp;этой идее, уж&amp;nbsp;больно она&amp;nbsp;красивая.&lt;br />
Для&amp;nbsp;того чтобы создать простейший модуль для&amp;nbsp;alterator, надо:&lt;br />
&lt;ol type="1">&lt;li> написать низкоуровневую часть &amp;ndash; backend, которая собственно и&amp;nbsp;будет крутить ручки в&amp;nbsp;системе
&lt;/li>&lt;li> написать интерфейс &lt;/li>&lt;/ol>
Давайте сделаем модуль, который позволит выбирать пользователю локаль в&amp;nbsp;системе.&lt;a name="h5146-2">&lt;/a>&lt;h2>3.1 Устройство backend&lt;/h2>
Интерфейс и&amp;nbsp;backend будут обмениваться между собой посредством команд фиксированного формата: "&amp;lt;объект&amp;gt; &amp;lt;действия&amp;gt;". Объект принято именовать так&amp;nbsp;же&amp;nbsp;как и&amp;nbsp;объекты в&amp;nbsp;файловой системе, то&amp;nbsp;есть последовательность слов, разделённых символом '/'.&lt;br />
Например:&lt;br />
/users/root&lt;br />
/network/interfaces/eth0&lt;br />
Первая часть имени совпадает с&amp;nbsp;именем файла бакенда.&lt;br />
Например&lt;br />
/users/root &amp;ndash; файл backend, называется users&lt;br />
/network/interfaces/eth0 &amp;ndash; файл backend называется network&lt;br />
Оставшаяся часть имени передаётся backend и&amp;nbsp;он дальше сам&amp;nbsp;разбирается с&amp;nbsp;тем что&amp;nbsp;с&amp;nbsp;ней делать.&lt;br />
Действия есть последовательность атрибутов со&amp;nbsp;значениями, один атрибут имеет особое значение, зовут его&amp;nbsp;action. action &amp;ndash; собственно означает какое действие мы&amp;nbsp;можем предпринять над&amp;nbsp;объектов.&lt;br />
Возможные значения action:&lt;br />
read &amp;ndash; прочитать атрибуты объекта&lt;br />
write &amp;ndash; изменить некоторые атрибуты объекта&lt;br />
list &amp;ndash; получить список объектов которые данный содержит (аналогично ls&amp;nbsp;в каталоге)&lt;br />
new&amp;nbsp;&amp;ndash; создать объект&lt;br />
delete &amp;ndash; удалить объект&lt;br />
Атрибут action всегда должен присутствовать в&amp;nbsp;команде.&lt;br />
Например:&lt;br />
/users/test action=new uid=506 gecos="Some User"&lt;br />
(создать пользователя тест с&amp;nbsp;UID 506 и&amp;nbsp;комментарием &amp;#8220;Some User&amp;#8221;)&lt;br />
/network/interfaces/eth0 action="read"&lt;br />
(считать параметры интерфейса, например ip-адрес,шлюз etc.)&lt;br />
Этот язык общения со&amp;nbsp;времён первого alterator носит странное имя&amp;nbsp;WOO.&lt;br />
В&amp;nbsp;нашем случае мы&amp;nbsp;имеем следующие объекты:&lt;br />
/i18n/current &amp;ndash; текущее значение локали&lt;br />
/i18n/available &amp;ndash; установленные в&amp;nbsp;системе локали&lt;br />
...&lt;br />
/i18n/available/Russian locale for&amp;nbsp;Russia &amp;ndash; например одна из&amp;nbsp;локалей в&amp;nbsp;системе.&lt;br />
Как&amp;nbsp;можно догадаться, i18n &amp;ndash; это&amp;nbsp;будет имя&amp;nbsp;нашего файла &amp;ndash; backend'a.&lt;br />
/i18n/current будет иметь следующие атрибуты:&lt;br />
stdname &amp;ndash; стандартное имя&amp;nbsp;локали без&amp;nbsp;кодировки, например &amp;#8220;ru_RU&amp;#8221;&lt;br />
title &amp;ndash; описательное имя&amp;nbsp;локали, например &amp;#8220;Russian locale for&amp;nbsp;Russia&amp;#8221;&lt;br />
charmap &amp;ndash; кодировка, например &amp;#8220;KOI8-R&amp;#8221;&lt;br />
stdname.charmap &amp;ndash; даёт стандартное системное имя, которое обычно&lt;br />
содержится в&amp;nbsp;переменной LANG, в&amp;nbsp;нашем случае это&amp;nbsp;ru_RU.KOI8-R.&lt;br />
Можно было бы&amp;nbsp;сделать один атрибут lang, но&amp;nbsp;удобнее держать отдельно&lt;br />
кодировку.&lt;br />
Чтобы считать текущее значение, команда следующая:&lt;br />
/i18n/current action=read&lt;br />
Чтобы записать новое значение переменной LANG, команда следующая:&lt;br />
/i18n/current action=write lang=ru_RU.KOI8-R&lt;br />
Как&amp;nbsp;видите атрибуты на&amp;nbsp;чтение и&amp;nbsp;запись не&amp;nbsp;обязаны совпадать. Может это&amp;nbsp;не&lt;br />
совсем идеологически верно, зато удобно.&lt;a name="h5146-3">&lt;/a>&lt;h2>3.1.2 Пишем backend&lt;/h2>
С&amp;nbsp;языком общения мы&amp;nbsp;вроде как&amp;nbsp;разобрались, теперь собственно формат&lt;br />
backend.&lt;br />
backend &amp;ndash; это&amp;nbsp;обычное приложение, написанное на&amp;nbsp;произвольном языке&lt;br />
программирования, который откликается на&amp;nbsp;внешние раздражители следующим образом:&lt;br />
*(action=read)* backend -r объект &amp;ndash; выдать на&amp;nbsp;stdout, атрибуты и&amp;nbsp;их значения в&amp;nbsp;формате:&lt;br />
атрибут1:значение1&lt;br />
атрибут2:значение2&lt;br />
....&lt;br />
(соответственно имя&amp;nbsp;атрибута не&amp;nbsp;должно содержать двоеточия &amp;ndash; это&amp;nbsp;не&amp;nbsp;очень&lt;br />
сильное ограничение)&lt;br />
объект &amp;ndash; это&amp;nbsp;хвост имени объекта, с&amp;nbsp;отрезанным именем backend.&lt;br />
Так&amp;nbsp;&amp;laquo;a/b/c/d&amp;raquo; &amp;ndash; урежется до&amp;nbsp;&amp;laquo;b/c/d&amp;raquo;.&lt;br />
Например: (для woo-команды: /i18n/current action=read)&lt;br />
        $ ./i18n -r current&lt;br />
        stdname:ru_RU&lt;br />
        title:Russian locale for&amp;nbsp;Russia&lt;br />
        charmap:KOI8-R&lt;br />
        $ ./i18n -r &amp;laquo;available/Russian locale for&amp;nbsp;Russia&amp;raquo;&lt;br />
        stdname:ru_RU&lt;br />
        charmaps:CP1251,IBM866,ISO-&lt;span class="nobr">8859&amp;ndash;5&lt;/span>,KOI8-R,UTF-8&lt;br />
*(action=list)* backend -l объект &amp;ndash; выдать на&amp;nbsp;stdout список подобъектов в&amp;nbsp;формате&lt;br />
&amp;laquo;имя[пробел][r|d]" где&amp;nbsp;d&amp;nbsp;ставится рядом с&amp;nbsp;объектом, содержащим другие&lt;br />
объекты, а&amp;nbsp;r &amp;ndash; рядом с&amp;nbsp;обычным объектом.&lt;br />
Например: (для woo-команд: /i18n action=list и&amp;nbsp;/i18n/available action=list)&lt;br />
        $ ./i18n -l /  &lt;br />
        available d&lt;br />
        current r&lt;br />
        &lt;br />
        $ ./i18n -l available&lt;br />
        Russian locale for&amp;nbsp;Russia r&lt;br />
        Russian locale for&amp;nbsp;Ukraine r&lt;br />
*(action=write,new)* backend -w объект &amp;ndash; принять с&amp;nbsp;stdin параметры в&amp;nbsp;виде "атрибут:значение" и&amp;nbsp;записать их&amp;nbsp;в объект.&lt;br />
Например: (для woo-команды: /i18n/current action=write lang=ru_RU.CP1251)&lt;br />
        $echo "lang:ru_RU.CP1251"| ./i18n -w current&lt;br />
Отдельной команды для&amp;nbsp;action=new нет, backend сам&amp;nbsp;в&amp;nbsp;состоянии догадаться, делать ему&amp;nbsp;новый объект или&amp;nbsp;модифицировать имеющийся.&lt;br />
*(action=delete)* backend -d объект &amp;ndash; удалить указанный объект&lt;br />
Ну&amp;nbsp;вот собственно и&amp;nbsp;весь формат backend.&lt;br />
Пример скрипта на&amp;nbsp;shell, который всё это&amp;nbsp;реализует приложен к&amp;nbsp;письму. Думаю что&amp;nbsp;вы&amp;nbsp;легко сможете написать и&amp;nbsp;свою версию, возможно даже более правильную и&amp;nbsp;корректную ;)&lt;a name="h5146-4">&lt;/a>&lt;h2>3.2 Опять про&amp;nbsp;Scheme: Локальные переменные&lt;/h2>
В&amp;nbsp;Scheme в&amp;nbsp;отличие от&amp;nbsp;Common Lisp применяется привычный подход к&amp;nbsp;понятию локальности (так называемый &amp;#8220;Lexical Scope&amp;#8221; против &amp;#8220;Dynamic Scope&amp;#8221; в&amp;nbsp;Common Lisp):&lt;br />
 * Переменные определённые внутри некоторой функции видны во&amp;nbsp;всех функциях,   определённых внутри данной, но&amp;nbsp;не видны вне&amp;nbsp;её.&lt;br />
        (define a&amp;nbsp;3)&lt;br />
        (define (f)&lt;br />
           (define b&amp;nbsp;4)&lt;br />
           (define (g)&lt;br />
              (write b)) ; мы&amp;nbsp;видим эту&amp;nbsp;переменную так&amp;nbsp;как g&amp;nbsp;сама определена внутри f&lt;br />
           (g)&lt;br />
           (write a) ; мы&amp;nbsp;видим эту&amp;nbsp;переменную ибо&amp;nbsp;она в&amp;nbsp;охватывающем окружении&lt;br />
           (write b)) ; это&amp;nbsp;наша локальная переменная&lt;br />
        (write b) ; ошибка a&amp;nbsp;&amp;ndash; определена внутри f&amp;nbsp;и не&amp;nbsp;видна на&amp;nbsp;вышестоящем уровне.&lt;br />
        (define a&amp;nbsp;4)&lt;br />
        (write a))&lt;br />
        (write x))&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
