<?xml version="1.0" encoding="windows-1251"?>
<rss version="2.0">
<channel>
<title>FreeSource - AltLinux/Sisyphus/Alterator/internals/3</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3</link>
<description>History/revisions of FreeSource/AltLinux/Sisyphus/Alterator/internals/3</description>
<language>en-us</language>
<item>
<title>2006-10-31 17:03:14</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3/show?time=2006-10-31+17%3A03%3A14</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.3" href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3&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;3&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2006-10-31+17%3A03%3A14">2006-10-31 17:03:14&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3">2008-03-06 15:11:04&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/3" target="_blank" title="" class="outerlink">altlinux.org&lt;/a>. Текст на&amp;nbsp;freesource.info заморожен.&lt;/div>&lt;/div>&lt;br />
(* (+ 1 2) 5)&lt;!--notypo-->&lt;textarea class="code" rows="2" readonly="readonly">(g (lambda (x) (+ x x)))&lt;/textarea>&lt;!--/notypo-->&lt;br />
(define a&amp;nbsp;4)%%&lt;br />
(define elem1 (cons 3 elem2)) ; первый элемент содержит 3 и&amp;nbsp;ссылается на&amp;nbsp;второй&lt;br />
Если захотим сделать список из&amp;nbsp;трёх элементов &lt;tt>1&lt;/tt>, &lt;tt>2&lt;/tt> и&amp;nbsp;&lt;tt>3&lt;/tt>, то&amp;nbsp;надо написать:&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;tt>(* (+ 1 2) 5)&lt;/tt>&lt;br />
&lt;tt>(g (lambda (x) (+ x&amp;nbsp;x)))&lt;/tt>&lt;br />
&lt;tt>(define a&amp;nbsp;4)&lt;/tt>&lt;br />
(define elem1 (cons 3 elem2)) ; первый эелемент содержит 3 и&amp;nbsp;ссылается на&amp;nbsp;второй&lt;br />
Если захотим сделать список из&amp;nbsp;трёх елементов &lt;tt>1&lt;/tt>, &lt;tt>2&lt;/tt> и&amp;nbsp;&lt;tt>3&lt;/tt>, то&amp;nbsp;надо написать:&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-09-26 14:40:01</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3/show?time=2006-09-26+14%3A40%3A01</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/3&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;3&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2006-09-26+14%3A40%3A01">2006-09-26 14:40:01&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2006-10-31+17%3A03%3A14">2006-10-31 17:03:14&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h5142-1">&lt;/a>&lt;h3> 6 Несколько замечаний про&amp;nbsp;функции &lt;/h3>&lt;a name="h5142-2">&lt;/a>&lt;h3> 7 О&amp;nbsp;символах &lt;/h3>&lt;a name="h5142-3">&lt;/a>&lt;h3>8 Универсальный клей &lt;/h3>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h5142-1">&lt;/a>&lt;h3> 2.6 Несколько замечаний про&amp;nbsp;функции &lt;/h3>&lt;a name="h5142-2">&lt;/a>&lt;h3> 2.7 О&amp;nbsp;символах &lt;/h3>&lt;a name="h5142-3">&lt;/a>&lt;h3>2.8 Универсальный клей &lt;/h3>&lt;a name="h5142-4">&lt;/a>&lt;h3> 2.9 Снова про&amp;nbsp;alterator &lt;/h3>
На&amp;nbsp;конструкции языка можно смотреть как&amp;nbsp;на&amp;nbsp;последовательный вызов функций, а&amp;nbsp;можно как&amp;nbsp;на&amp;nbsp;фразу на&amp;nbsp;каком-то другом языке более высокого уровня&lt;br />
&lt;tt>(vbox (button &amp;#8220;aaa&amp;#8221;) (button &amp;#8220;bbb&amp;#8221;))&lt;/tt>&lt;br />
Можно прочитать как&amp;nbsp;&amp;laquo;вызвать функцию которая вернёт вертикальную группу с&amp;nbsp;двумя параметрами, результатами вызова функций одна из&amp;nbsp;которых создаст кнопку с&amp;nbsp;именем &lt;tt>aaa&lt;/tt>, а&amp;nbsp;другая &amp;ndash; с&amp;nbsp;именем &lt;tt>bbb&lt;/tt>. А&amp;nbsp;можно как&amp;nbsp;&amp;laquo;вертикальная группа из&amp;nbsp;кнопкок &lt;tt>aaa&lt;/tt> и&amp;nbsp;&lt;tt>bbb&lt;/tt>&amp;laquo;.&lt;br />
На&amp;nbsp;alterator можно смотреть как&amp;nbsp;на&amp;nbsp;сборище функций, а&amp;nbsp;можно как&amp;nbsp;на&amp;nbsp;словарь. Когда вы&amp;nbsp;решаете какую-нибудь задачу на&amp;nbsp;alterator, вы&amp;nbsp;просто формулируете проблему на&amp;nbsp;некотором языке, а&amp;nbsp;он её решает. Именно формулируете, а&amp;nbsp;не программируете последовательный вызов функций.&lt;br />
Давайте сделаем последовательность из&amp;nbsp;двух диалогов, один спросит наше имя, а&amp;nbsp;второй напечатает приглашение.&lt;br />
Для&amp;nbsp;того чтобы связать диалоги, надо присвоить им&amp;nbsp;имена. В&amp;nbsp;alterator каждый диалог имеет уникальный URL, и&amp;nbsp;имеется таблица соответствий между этими URL&amp;nbsp;и&amp;nbsp;файлами которые содержат описания диалогов. Основной диалог, с&amp;nbsp;которым происходит запуск приложения, всегда должен иметь имя&amp;nbsp;&lt;tt>/&lt;/tt>.&lt;br />
Пусть описание диалога с&amp;nbsp;вопросом будет жить в&amp;nbsp;файле &lt;tt>q.scm&lt;/tt>, а&amp;nbsp;описание диалога с&amp;nbsp;приглашением &lt;tt>w.scm&lt;/tt>, назовём первый, как&amp;nbsp;требуется правилами, &lt;tt>/&lt;/tt>, а&amp;nbsp;второй &amp;mdash; &lt;tt>/welcome&lt;/tt>.&lt;br />
Описание будет выглядеть так:&lt;br />
" начинаем с&amp;nbsp;файла 'q.scm' (или /  &amp;ndash; это&amp;nbsp;в&amp;nbsp;файле 'q.scm)'&lt;br />
&lt;div class="indent">/welcome  &amp;ndash; это&amp;nbsp;в&amp;nbsp;файле 'w.scm'"&lt;/div>
 %%&lt;br />
Что&amp;nbsp;на&amp;nbsp;языке mapper записывается как:&lt;br />
(/ file &amp;#8220;q.scm&amp;#8221;)&lt;br />
(/welcome file &amp;#8220;w.scm&amp;#8221;)&lt;br />
Сохраним это&amp;nbsp;в&amp;nbsp;файле &lt;tt>simple_map.scm&lt;/tt>&lt;br />
Теперь создадим описание диалога с&amp;nbsp;приветствием: вертикальная группа в&amp;nbsp;которую вставили:&lt;br />
 &amp;ndash; метку &amp;#8220;My first alterator dialog&amp;#8221;&lt;br />
 &amp;ndash; горизонтальная группа с&amp;nbsp;меткой &amp;#8220;Your name:" и&amp;nbsp;полем редактирования по&amp;nbsp;имени &lt;tt>username&lt;/tt>, по&amp;nbsp;умолчанию пустым.&lt;br />
 &amp;ndash; кнопка &amp;#8220;OK&amp;#8221;, при&amp;nbsp;нажатии на&amp;nbsp;которую происходит перeключение на&amp;nbsp;URL &lt;tt>/welcome&lt;/tt>  и&amp;nbsp;передаётся параметр по&amp;nbsp;имени name со&amp;nbsp;значением взятом из&amp;nbsp;поля редактирования  &lt;tt>username&lt;/tt>.&lt;br />
Сначала разберём конструкции, с&amp;nbsp;которыми ещё не&amp;nbsp;сталкивались:&lt;br />
&lt;ol type="1">&lt;li> Поле редактирования, по&amp;nbsp;умолчанию пустое, описывается как: &lt;tt>(edit &amp;quot;&amp;quot;)&lt;/tt>
&lt;/li>&lt;li> Сказать, поле с&amp;nbsp;именем username, это&amp;nbsp;значит: &lt;tt>(id 'username (edit &amp;quot;&amp;quot;))&lt;/tt>
&lt;/li>&lt;li> Сказать что&amp;nbsp;взять содержимое из&amp;nbsp;поля по&amp;nbsp;имени username, это: &lt;tt>(username text)&lt;/tt>
&lt;/li>&lt;li> Сказать, что&amp;nbsp;&amp;laquo;при нажатии перейти ...&amp;raquo;, это&amp;nbsp;значит: &lt;tt>(when clicked (goto &amp;laquo;/welcome&amp;raquo; 'name (username text)))&lt;/tt>&lt;/li>&lt;/ol>
Переключение диалога означает, что&amp;nbsp;вы&amp;nbsp;просто заменяете содержимое окна, то&amp;nbsp;есть остаётесь на&amp;nbsp;самом деле в&amp;nbsp;том же&amp;nbsp;самом диалоге, просто с&amp;nbsp;другим содержимым.&lt;br />
Обратите внимание на&amp;nbsp;использование символов, когда мы&amp;nbsp;обрабатываем фразы, содержащие &amp;laquo;имя&amp;raquo;. В&amp;nbsp;конструкции с&amp;nbsp;&lt;tt>id&lt;/tt> мы&amp;nbsp;имеем просто имя, когда уже&amp;nbsp;забираем текст, у&amp;nbsp;нас в&amp;nbsp;наличие уже&amp;nbsp;не&amp;nbsp;просто имя, а&amp;nbsp;имя связанное с&amp;nbsp;конкретным виджетом, поэтому обращаться к&amp;nbsp;нему можно уже&amp;nbsp;без использования &lt;tt>quote&lt;/tt>.&lt;br />
Соединим всё это&amp;nbsp;теперь вместе:&lt;br />
(document:surround &amp;laquo;/std/base&amp;raquo;)&lt;br />
(vbox&lt;br />
&lt;div class="indent">(label &amp;#8220;My first alterator dialog&amp;#8221;)&lt;br />
(hbox&lt;br />
&lt;div class="indent">(label &amp;#8220;Your name:&amp;raquo;)&lt;br />
(document:id username (edit &amp;quot;&amp;quot;)))&lt;br />
&lt;/div>(button &amp;#8220;OK&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(when clicked (document:replace &amp;laquo;/welcome&amp;raquo; 'name (username text)))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
И&amp;nbsp;сохраним в&amp;nbsp;файл &lt;tt>q.scm&lt;/tt>&lt;br />
Аргументы, которые передавались диалогу доступны через функцию &lt;tt>global&lt;/tt>.&lt;br />
Описание диалога приветствия:&lt;br />
Вертикальная группа из:&lt;br />
&lt;ul>&lt;li> метки, текст которой есть соединение &amp;#8220;Welcome " и&amp;nbsp;значения переданного  параметра по&amp;nbsp;имени &lt;tt>name&lt;/tt>.
&lt;/li>&lt;li> кнопки &amp;#8220;OK&amp;#8221;, при&amp;nbsp;нажатие на&amp;nbsp;которую происходит завершение работы  диалога (и соотв. завершение работы вообще)&lt;/li>&lt;/ul>
Вот&amp;nbsp;содержимое файла &lt;tt>w.scm&lt;/tt>:&lt;br />
(document:surround &amp;laquo;/std/base&amp;raquo;)&lt;br />
(vbox&lt;br />
&lt;div class="indent">(label (string-append &amp;#8220;Welcome "&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(global 'name)))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>(button &amp;#8220;OK&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(when clicked (document:end))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Замечание: document:surround &amp;ndash; это&amp;nbsp;инструкция загрузки стандартной среды документа, пока не&amp;nbsp;обращайте на&amp;nbsp;неё внимание.&lt;br />
Теперь произведём запуск одной компоненты, alterator которая собственно занимается диалогом с&amp;nbsp;пользователем:&lt;br />
&lt;tt>lookout -m simple_map.scm&lt;/tt>.&lt;br />
Всё &amp;ndash; ваше первое приложение под&amp;nbsp;&lt;tt>alterator&lt;/tt> готово. Согласитесь, что&amp;nbsp;за&amp;nbsp;три лекции мы&amp;nbsp;уже кое-чему научились.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2006-09-26 14:36:48</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3/show?time=2006-09-26+14%3A36%3A48</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/3&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;3&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2006-09-26+14%3A36%3A48">2006-09-26 14:36:48&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2006-09-26+14%3A40%3A01">2006-09-26 14:40:01&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;ol type="1">&lt;li> Сказать, что&amp;nbsp;&amp;laquo;при нажатии перейти ...&amp;raquo;, это&amp;nbsp;значит: &lt;tt>(when clicked (goto &amp;laquo;/welcome&amp;raquo; 'name (username text)))&lt;/tt>
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(when clicked (document:replace &amp;laquo;/welcome&amp;raquo; 'name (username text)))))&lt;br />
(when clicked (document:end))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/li>&lt;/ol>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;ol type="1">&lt;li> Сказать, что&amp;nbsp;&amp;laquo;при нажатии перейти ...&amp;raquo;, это&amp;nbsp;значит: &lt;tt>(on-click (goto &amp;laquo;/welcome&amp;raquo; 'name (username text)))&lt;/tt>
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(on-click (document:replace &amp;laquo;/welcome&amp;raquo; 'name (username text)))))&lt;br />
(on-click (document:end))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/li>&lt;/ol>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-09-26 16:13:31</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3/show?time=2005-09-26+16%3A13%3A31</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/3&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;3&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2005-09-26+16%3A13%3A31">2005-09-26 16:13:31&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2006-09-26+14%3A36%3A48">2006-09-26 14:36:48&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">У&amp;nbsp;длинного варианта записи &lt;tt>(quote объект)&lt;/tt> существует сокращенный: &lt;tt>'объект&lt;/tt>&lt;br />
То&amp;nbsp;есть можно написать так: &lt;tt>(define b&amp;nbsp;'a)&lt;/tt>&lt;br />
Не&amp;nbsp;сильно огорчайтесь, если чего-то сейчас не&amp;nbsp;ясно, всё прояснится, когда мы&amp;nbsp;чуть глубже поймём, как&amp;nbsp;работает интерпретатор.&lt;br />
Доступ к&amp;nbsp;первому и&amp;nbsp;второму элементу пар&amp;nbsp;обеспечивают функции &lt;tt>car&lt;/tt> и&amp;nbsp;&lt;tt>cdr&lt;/tt>: // &lt;em>где-то видел мнемоническую историю...&lt;/em>&lt;br />
(define a&amp;nbsp;(cons 'first 'second))&lt;br />
Пары вполне достаточно, чтобы создать такую известную структуру как&amp;nbsp;односвязный список.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">У&amp;nbsp;длинного варианта записи:&lt;br />
&lt;tt>(quote объект)&lt;/tt>&lt;br />
Существует сокращенный вариант записи:&lt;br />
&lt;tt>'объект&lt;/tt>&lt;br />
То&amp;nbsp;есть можно написать так:&lt;br />
&lt;tt>(define b&amp;nbsp;'a)&lt;/tt>&lt;br />
Не&amp;nbsp;сильно огорчайтесь, если чего-то сейчас не&amp;nbsp;ясно, всё прояснится, когда мы&amp;nbsp;чуть глубже поймём как&amp;nbsp;работает интерпретатор.&lt;br />
Доступ к&amp;nbsp;первому и&amp;nbsp;второму элементу пар&amp;nbsp;обеспечивают функции &lt;tt>car&lt;/tt> и&amp;nbsp;&lt;tt>cdr&lt;/tt>:&lt;br />
(define a&amp;nbsp;(car 'first 'second))&lt;br />
Пары вполне достаточно чтобы создать такую известную структуру как&amp;nbsp;односвязный список.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-09-26 16:09:49</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3/show?time=2005-09-26+16%3A09%3A49</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/3&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;3&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2005-09-26+16%3A09%3A49">2005-09-26 16:09:49&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2005-09-26+16%3A13%3A31">2005-09-26 16:13:31&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">(document:id username (edit &amp;quot;&amp;quot;)))&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(on-click (document:replace &amp;laquo;/welcome&amp;raquo; 'name (username text)))))&lt;br />
(on-click (document:end))))&lt;/div>&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">(id 'username (edit &amp;quot;&amp;quot;)))&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(on-click (goto &amp;laquo;/welcome&amp;raquo; 'name (username text)))))&lt;br />
(on-click (end-dialog))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-07-20 12:26:14</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3/show?time=2005-07-20+12%3A26%3A14</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/3&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;3&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2005-07-20+12%3A26%3A14">2005-07-20 12:26:14&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2005-09-26+16%3A09%3A49">2005-09-26 16:09:49&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">(document:surround &amp;laquo;/std/base&amp;raquo;)&lt;br />
Замечание: document:surround &amp;ndash; это&amp;nbsp;инструкция загрузки стандартной среды документа, пока не&amp;nbsp;обращайте на&amp;nbsp;неё внимание.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-07-20 00:48:34</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3/show?time=2005-07-20+00%3A48%3A34</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/3&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;3&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2005-07-20+00%3A48%3A34">2005-07-20 00:48:34&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2005-07-20+12%3A26%3A14">2005-07-20 12:26:14&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;a name="h5142-1">&lt;/a>&lt;h3> 2.6 Несколько замечаний про&amp;nbsp;функции &lt;/h3>
&lt;tt>(define f&amp;nbsp;(lambda (x y) ... ))&lt;/tt>&lt;br />
&lt;tt>(define (f x&amp;nbsp;y) ... )&lt;/tt>&lt;br />
&lt;tt>(define (f) ... )&lt;/tt>&lt;br />
Вот, например, как&amp;nbsp;можно было бы&amp;nbsp;определить функцию &amp;laquo;модуль числа&amp;raquo;:&lt;br />
&lt;tt>(define (abs x) ((if (&amp;lt; x&amp;nbsp;0) &amp;ndash; +) x))&lt;/tt>&lt;br />
(* a&amp;nbsp;5)&lt;!--notypo-->&lt;textarea class="code" rows="3" readonly="readonly">##(* (+ 1 2) 5)##
(g f)&lt;/textarea>&lt;!--/notypo-->&lt;br />
&lt;tt>(g (lambda (x) (+ x&amp;nbsp;x)))&lt;/tt>&lt;a name="h5142-2">&lt;/a>&lt;h3> 2.7 О&amp;nbsp;символах &lt;/h3>
Из&amp;nbsp;чего сделана переменная? Переменная &amp;mdash; это&amp;nbsp;некоторое &amp;laquo;имя&amp;raquo; и&amp;nbsp;&amp;laquo;связь&amp;raquo; между этим именем и&amp;nbsp;каким-то объектом, и&amp;nbsp;прежде всего именно &amp;laquo;связь&amp;raquo; (связи может не&amp;nbsp;быть, а&amp;nbsp;имена есть всегда). То&amp;nbsp;есть можно рассматривать по&amp;nbsp;отдельности: отдельно имя, и&amp;nbsp;отдельно некоторая таблица, которая ставит соответствие между именами и&amp;nbsp;объектами, на&amp;nbsp;которые они&amp;nbsp;ссылаются.&lt;br />
&lt;tt>(define a&amp;nbsp;4)&lt;/tt>&lt;br />
Это&amp;nbsp;значит есть, имя&amp;nbsp;&lt;tt>a&lt;/tt> и&amp;nbsp;оно ссылается на&amp;nbsp;объект &amp;ndash; число &lt;tt>4&lt;/tt>.&lt;br />
Когда интерпретатор видит выражение &lt;tt>(define b&amp;nbsp;a)&lt;/tt>, он&amp;nbsp;обнаруживает наличие имени &lt;tt>a&lt;/tt>, а&amp;nbsp;потом производит поиск в&amp;nbsp;своей таблице имён, отмечает, что&amp;nbsp;&lt;tt>a&lt;/tt> ссылается на&amp;nbsp;объект  &amp;ndash; число &lt;tt>4&lt;/tt> и&amp;nbsp;производит подстановку, после которой выражение приобретает вид&amp;nbsp;&lt;tt>(define b&amp;nbsp;4)&lt;/tt>.&lt;br />
А&amp;nbsp;что если мы&amp;nbsp;хотим получить просто &amp;laquo;имя&amp;raquo;? Тогда мы&amp;nbsp;говорим интерпретатору: пожалуйста, не&amp;nbsp;надо размышлять над&amp;nbsp;следующим выражением, дай&amp;nbsp;мне его&amp;nbsp;&amp;laquo;как есть&amp;raquo; &amp;ndash; эта&amp;nbsp;процедура носит имя&amp;nbsp;&lt;tt>quote&lt;/tt>.&lt;br />
&lt;tt>(define b&amp;nbsp;(quote a))&lt;/tt>  &amp;ndash; назначит &amp;laquo;имени&amp;raquo; &lt;tt>b&lt;/tt>, уже&amp;nbsp;не&amp;nbsp;не &lt;tt>4&lt;/tt>, а&amp;nbsp;просто &amp;laquo;имя&amp;raquo; &lt;tt>a&lt;/tt>.&lt;br />
&lt;tt>(quote объект)&lt;/tt>&lt;br />
&lt;tt>'объект&lt;/tt>&lt;br />
&lt;tt>(define b&amp;nbsp;'a)&lt;/tt>&lt;br />
Обратите внимание на&amp;nbsp;то что&amp;nbsp;переменной &lt;tt>b&lt;/tt> нет&amp;nbsp;(точнее связи нет), но&amp;nbsp;&amp;laquo;имя&amp;raquo; &lt;tt>b&lt;/tt> без&amp;nbsp;связи с&amp;nbsp;чем-либо замечательно интерпретируется.&lt;br />
Не&amp;nbsp;сильно огорчайтесь, если чего-то сейчас не&amp;nbsp;ясно, всё прояснится, когда мы&amp;nbsp;чуть глубже поймём как&amp;nbsp;работает интерпретатор.&lt;a name="h5142-3">&lt;/a>&lt;h3>2.8 Универсальный клей &lt;/h3>
Практически нет&amp;nbsp;программ, которые работали бы&amp;nbsp;с базовыми типами предоставляемыми языком (строки, числа, символы), каждый язык предоставляет возможность разработчику создавать свои, новые типы, составленные из&amp;nbsp;других типов (из базовых или&amp;nbsp;других составных).&lt;br />
(cons &amp;#8220;aaa&amp;#8221; &amp;#8220;bbb&amp;#8221;)&lt;!--notypo-->&lt;textarea class="code" rows="3" readonly="readonly">Доступ к первому и второму элементу пар обеспечивают функции ##car## и ##cdr##:
(cdr a) ; получить второй элемент пары, то есть &amp;quot;имя&amp;quot; &amp;quot;second&amp;quot;&lt;/textarea>&lt;!--/notypo-->&lt;br />
Для&amp;nbsp;этого первый элемент пары будет ссылаться на&amp;nbsp;содержимое элемента списка, а&amp;nbsp;второй &amp;ndash; на&amp;nbsp;следующий элемент списка. Последний элемент списка должен ссылаться на&amp;nbsp;&amp;laquo;никого нет&amp;raquo;, мы&amp;nbsp;для этого введём специальное имя&amp;nbsp;&lt;tt>()&lt;/tt>. &lt;br />
Вот&amp;nbsp;например так&amp;nbsp;создаётся список из&amp;nbsp;двух элементов, содержащих &lt;tt>3&lt;/tt> и&amp;nbsp;&lt;tt>4&lt;/tt>:&lt;br />
&lt;tt>(define elem1 (cons 3 (cons 4 '())))&lt;/tt>&lt;br />
Если захотим сделать список из&amp;nbsp;трёх елементов &lt;tt>1&lt;/tt>, &lt;tt>2&lt;/tt> и&amp;nbsp;&lt;tt>3&lt;/tt>, то&amp;nbsp;надо написать:&lt;br />
&lt;tt>(cons 1 (cons 2 (cons 3 '())))&lt;/tt>&lt;br />
Как&amp;nbsp;видно конструкция очень громоздкая, поэтому есть более короткий вариант:&lt;br />
&lt;tt>(list 1 2 3)&lt;/tt>&lt;br />
Поскольку список склеен из&amp;nbsp;пар, то&amp;nbsp;и работать с&amp;nbsp;ним можно при&amp;nbsp;помощи при&amp;nbsp;помощи тех&amp;nbsp;же&amp;nbsp;&lt;tt>car&lt;/tt> и&amp;nbsp;&lt;tt>cdr&lt;/tt>.&lt;br />
&lt;tt>(define a&amp;nbsp;(list 1 2 3))&lt;/tt>&lt;br />
Опять-таки для&amp;nbsp;веера из&amp;nbsp;&lt;tt>car&lt;/tt> и&amp;nbsp;&lt;tt>cdr&lt;/tt> существует сокращенные варианты записи:&lt;a name="h5142-4">&lt;/a>&lt;h3> 2.9 Снова про&amp;nbsp;alterator &lt;/h3>
&lt;tt>(vbox (button &amp;#8220;aaa&amp;#8221;) (button &amp;#8220;bbb&amp;#8221;))&lt;/tt>&lt;br />
Можно прочитать как&amp;nbsp;&amp;laquo;вызвать функцию которая вернёт вертикальную группу с&amp;nbsp;двумя параметрами, результатами вызова функций одна из&amp;nbsp;которых создаст кнопку с&amp;nbsp;именем &lt;tt>aaa&lt;/tt>, а&amp;nbsp;другая &amp;ndash; с&amp;nbsp;именем &lt;tt>bbb&lt;/tt>. А&amp;nbsp;можно как&amp;nbsp;&amp;laquo;вертикальная группа из&amp;nbsp;кнопкок &lt;tt>aaa&lt;/tt> и&amp;nbsp;&lt;tt>bbb&lt;/tt>&amp;laquo;.&lt;br />
Для&amp;nbsp;того чтобы связать диалоги, надо присвоить им&amp;nbsp;имена. В&amp;nbsp;alterator каждый диалог имеет уникальный URL, и&amp;nbsp;имеется таблица соответствий между этими URL&amp;nbsp;и&amp;nbsp;файлами которые содержат описания диалогов. Основной диалог, с&amp;nbsp;которым происходит запуск приложения, всегда должен иметь имя&amp;nbsp;&lt;tt>/&lt;/tt>.&lt;br />
Пусть описание диалога с&amp;nbsp;вопросом будет жить в&amp;nbsp;файле &lt;tt>q.scm&lt;/tt>, а&amp;nbsp;описание диалога с&amp;nbsp;приглашением &lt;tt>w.scm&lt;/tt>, назовём первый, как&amp;nbsp;требуется правилами, &lt;tt>/&lt;/tt>, а&amp;nbsp;второй &amp;mdash; &lt;tt>/welcome&lt;/tt>.&lt;br />
" начинаем с&amp;nbsp;файла 'q.scm' (или /  &amp;ndash; это&amp;nbsp;в&amp;nbsp;файле 'q.scm)'&lt;br />
&lt;div class="indent">/welcome  &amp;ndash; это&amp;nbsp;в&amp;nbsp;файле 'w.scm'"&lt;/div>
 %%&lt;br />
Сохраним это&amp;nbsp;в&amp;nbsp;файле &lt;tt>simple_map.scm&lt;/tt>&lt;br />
Теперь создадим описание диалога с&amp;nbsp;приветствием: вертикальная группа в&amp;nbsp;которую вставили:&lt;br />
 &amp;ndash; метку &amp;#8220;My first alterator dialog&amp;#8221;&lt;br />
 &amp;ndash; горизонтальная группа с&amp;nbsp;меткой &amp;#8220;Your name:" и&amp;nbsp;полем редактирования по&amp;nbsp;имени &lt;tt>username&lt;/tt>, по&amp;nbsp;умолчанию пустым.&lt;br />
 &amp;ndash; кнопка &amp;#8220;OK&amp;#8221;, при&amp;nbsp;нажатии на&amp;nbsp;которую происходит перeключение на&amp;nbsp;URL &lt;tt>/welcome&lt;/tt>  и&amp;nbsp;передаётся параметр по&amp;nbsp;имени name со&amp;nbsp;значением взятом из&amp;nbsp;поля редактирования  &lt;tt>username&lt;/tt>.&lt;br />
&lt;ol type="1">&lt;li> Поле редактирования, по&amp;nbsp;умолчанию пустое, описывается как: &lt;tt>(edit &amp;quot;&amp;quot;)&lt;/tt>
&lt;/li>&lt;li> Сказать, поле с&amp;nbsp;именем username, это&amp;nbsp;значит: &lt;tt>(id 'username (edit &amp;quot;&amp;quot;))&lt;/tt>
&lt;/li>&lt;li> Сказать что&amp;nbsp;взять содержимое из&amp;nbsp;поля по&amp;nbsp;имени username, это: &lt;tt>(username text)&lt;/tt>
&lt;/li>&lt;li> Сказать, что&amp;nbsp;&amp;laquo;при нажатии перейти ...&amp;raquo;, это&amp;nbsp;значит: &lt;tt>(on-click (goto &amp;laquo;/welcome&amp;raquo; 'name (username text)))&lt;/tt>&lt;/li>&lt;/ol>
Переключение диалога означает, что&amp;nbsp;вы&amp;nbsp;просто заменяете содержимое окна, то&amp;nbsp;есть остаётесь на&amp;nbsp;самом деле в&amp;nbsp;том же&amp;nbsp;самом диалоге, просто с&amp;nbsp;другим содержимым.&lt;br />
Обратите внимание на&amp;nbsp;использование символов, когда мы&amp;nbsp;обрабатываем фразы, содержащие &amp;laquo;имя&amp;raquo;. В&amp;nbsp;конструкции с&amp;nbsp;&lt;tt>id&lt;/tt> мы&amp;nbsp;имеем просто имя, когда уже&amp;nbsp;забираем текст, у&amp;nbsp;нас в&amp;nbsp;наличие уже&amp;nbsp;не&amp;nbsp;просто имя, а&amp;nbsp;имя связанное с&amp;nbsp;конкретным виджетом, поэтому обращаться к&amp;nbsp;нему можно уже&amp;nbsp;без использования &lt;tt>quote&lt;/tt>.&lt;br />
&lt;div class="indent">(label &amp;#8220;My first alterator dialog&amp;#8221;)&lt;br />
(hbox&lt;br />
&lt;div class="indent">(label &amp;#8220;Your name:&amp;raquo;)&lt;br />
(id 'username (edit &amp;quot;&amp;quot;)))&lt;br />
&lt;/div>(button &amp;#8220;OK&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(on-click (goto &amp;laquo;/welcome&amp;raquo; 'name (username text)))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
И&amp;nbsp;сохраним в&amp;nbsp;файл &lt;tt>q.scm&lt;/tt>&lt;br />
Аргументы, которые передавались диалогу доступны через функцию &lt;tt>global&lt;/tt>.&lt;br />
&lt;ul>&lt;li> метки, текст которой есть соединение &amp;#8220;Welcome " и&amp;nbsp;значения переданного  параметра по&amp;nbsp;имени &lt;tt>name&lt;/tt>.
&lt;/li>&lt;li> кнопки &amp;#8220;OK&amp;#8221;, при&amp;nbsp;нажатие на&amp;nbsp;которую происходит завершение работы  диалога (и соотв. завершение работы вообще)&lt;/li>&lt;/ul>
Вот&amp;nbsp;содержимое файла &lt;tt>w.scm&lt;/tt>:&lt;br />
&lt;div class="indent">(label (string-append &amp;#8220;Welcome "&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(global 'name)))&lt;br />
&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>(button &amp;#8220;OK&amp;#8221;&lt;br />
&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">&lt;div class="indent">(on-click (end-dialog))))&lt;/div>&lt;/div>&lt;/div>&lt;/div>&lt;/div>
Теперь произведём запуск одной компоненты, alterator которая собственно занимается диалогом с&amp;nbsp;пользователем:&lt;br />
&lt;tt>lookout -m simple_map.scm&lt;/tt>.&lt;br />
Всё &amp;ndash; ваше первое приложение под&amp;nbsp;&lt;tt>alterator&lt;/tt> готово. Согласитесь, что&amp;nbsp;за&amp;nbsp;три лекции мы&amp;nbsp;уже кое-чему научились.&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">&lt;a name="h5142-1">&lt;/a>&lt;h2> 2.6 Несколько замечаний про&amp;nbsp;функции &lt;/h2>
(define f&amp;nbsp;(lambda (x y) ... ))&lt;br />
(define (f x&amp;nbsp;y) ... )&lt;br />
(define (f) ... )&lt;br />
Вот&amp;nbsp;например как&amp;nbsp;можно было бы&amp;nbsp;определить функцию &amp;laquo;модуль числа&amp;raquo;:&lt;br />
(define (abs x) &lt;span class="missingpage">(&amp;lt; x&amp;nbsp;0) &amp;ndash; +) x&lt;/span>&lt;a href="http://freesource.info/wiki/if/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>&lt;br />
(* a&amp;nbsp;5)&lt;br />
(* (+ 1 2) 5)&lt;br />
(g f)&lt;br />
(g (lambda (x) (+ x&amp;nbsp;x)))&lt;a name="h5142-2">&lt;/a>&lt;h2> 2.7 О&amp;nbsp;символах &lt;/h2>
Из&amp;nbsp;чего сделана переменная? Переменная это&amp;nbsp;некоторое &amp;laquo;имя&amp;raquo; и&amp;nbsp;&amp;laquo;связь&amp;raquo; между этим именем и&amp;nbsp;каким-то объектом, и&amp;nbsp;прежде всего именно &amp;laquo;связь&amp;raquo; (связи может не&amp;nbsp;быть, а&amp;nbsp;имена есть всегда). То&amp;nbsp;есть можно рассматривать по-отдельности: отдельно имя, и&amp;nbsp;отдельно некоторая таблица которая ставит соответствие между именами и&amp;nbsp;объектами на&amp;nbsp;которые они&amp;nbsp;ссылаются.&lt;br />
(define a&amp;nbsp;4)&lt;br />
Это&amp;nbsp;значит есть, имя&amp;nbsp;&amp;#8220;a&amp;#8221; и&amp;nbsp;оно ссылается на&amp;nbsp;объект &amp;ndash; число 4.&lt;br />
Когда интерпретатор видит выражение (define b&amp;nbsp;a), он&amp;nbsp;обнаруживает наличие имени &amp;#8220;a&amp;#8221;, а&amp;nbsp;потом производит поиск в&amp;nbsp;своей таблице имён, отмечает что&amp;nbsp;&amp;#8220;a&amp;#8221; ссылается на&amp;nbsp;объект  - число 4 и&amp;nbsp;производит подстановку, после которой выражение приобретает вид&amp;nbsp;(define b&amp;nbsp;4).&lt;br />
А&amp;nbsp;что если мы&amp;nbsp;хотим получить просто &amp;laquo;имя&amp;raquo;? Тогда мы&amp;nbsp;говорим интерпретатору: пожалуйста, не&amp;nbsp;надо размышлять над&amp;nbsp;следующим выражением, дай&amp;nbsp;мне его&amp;nbsp;&amp;laquo;как есть&amp;raquo; &amp;ndash; эта&amp;nbsp;процедура носит имя&amp;nbsp;quote.&lt;br />
(define b&amp;nbsp;(quote a))  - назначит &amp;laquo;имени&amp;raquo; b, уже&amp;nbsp;не&amp;nbsp;не 4, а&amp;nbsp;просто &amp;laquo;имя&amp;raquo; a.&lt;br />
(quote объект)&lt;br />
'объект.&lt;br />
(define b&amp;nbsp;'a).&lt;br />
--&lt;br />
--&lt;br />
Обратите внимание на&amp;nbsp;то что&amp;nbsp;переменной b&amp;nbsp;нет (точнее связи нет), но&amp;nbsp;&amp;laquo;имя&amp;raquo; b&amp;nbsp;без связи с&amp;nbsp;чем-либо замечательно интерпретируется.&lt;br />
Не&amp;nbsp;сильно огорчайтесь, если чего-то сейчас не&amp;nbsp;ясно, всё прояснится когда мы&amp;nbsp;чуть глубже поймём как&amp;nbsp;работает интерпретатор.&lt;a name="h5142-3">&lt;/a>&lt;h2>2.8 Универсальный клей &lt;/h2>
Практически нет&amp;nbsp;программ которые работали бы&amp;nbsp;с базовыми типами предоставляемыми языком (строки, числа, символы), каждый язык предоставляет возможность разработчику создавать свои, новые типы, составленные из&amp;nbsp;других типов (из базовых или&amp;nbsp;других составных).&lt;br />
(cons &amp;#8220;aaa&amp;#8221; &amp;#8220;bbb&amp;#8221;)&lt;br />
Доступ к&amp;nbsp;первому и&amp;nbsp;второму элементу пар&amp;nbsp;обеспечивают функции car&amp;nbsp;и&amp;nbsp;cdr:&lt;br />
(cdr a) ; получить второй элемент пары, то&amp;nbsp;есть &amp;laquo;имя&amp;raquo; &amp;#8220;second&amp;#8221;&lt;br />
Для&amp;nbsp;этого первый элемент пары будет ссылаться на&amp;nbsp;содержимое элемента списка, а&amp;nbsp;второй &amp;ndash; на&amp;nbsp;следующий элемент списка. Последний элемент списка должен ссылаться на&amp;nbsp;&amp;laquo;никого нет&amp;raquo;, мы&amp;nbsp;для этого введём специальное имя&amp;nbsp;"()". &lt;br />
Вот&amp;nbsp;например так&amp;nbsp;создаётся список из&amp;nbsp;двух элементов, содержащих 3 и&amp;nbsp;4:&lt;br />
(define elem1 (cons 3 (cons 4 '())))&lt;br />
Если захотим сделать список из&amp;nbsp;трёх елементов 1 2 и&amp;nbsp;3, то&amp;nbsp;надо написать:&lt;br />
(cons 1 (cons 2 (cons 3 '())))&lt;br />
Как&amp;nbsp;видно конструкция очень громоздкая, поэтому есть более короткий&lt;br />
вариант:&lt;br />
(list 1 2 3)&lt;br />
Поскольку список склеен из&amp;nbsp;пар, то&amp;nbsp;и работать с&amp;nbsp;ним можно при&amp;nbsp;помощи при&amp;nbsp;помощи тех&amp;nbsp;же&amp;nbsp;car и&amp;nbsp;cdr.&lt;br />
(define a&amp;nbsp;(list 1 2 3))&lt;br />
Опять-таки для&amp;nbsp;веера из&amp;nbsp;&amp;#8220;car&amp;#8221; и&amp;nbsp;&amp;#8220;cdr&amp;#8221; существует сокращенные варианты&lt;br />
записи:&lt;a name="h5142-4">&lt;/a>&lt;h2> 2.9 Снова про&amp;nbsp;alterator &lt;/h2>
(vbox (button &amp;#8220;aaa&amp;#8221;) (button &amp;#8220;bbb&amp;#8221;))&lt;br />
Можно прочитать как&amp;nbsp;&amp;laquo;вызвать функцию которая вернёт вертикальную группу с&amp;nbsp;двумя параметрами, результатами вызова функций одна из&amp;nbsp;которых создаст&lt;br />
кнопку с&amp;nbsp;именем 'aaa', а&amp;nbsp;другая &amp;ndash; с&amp;nbsp;именем 'bbb'". А&amp;nbsp;можно как&amp;nbsp;&amp;laquo;вертикальная группа из&amp;nbsp;кнопкок 'aaa' и&amp;nbsp;'bbb'".&lt;br />
Для&amp;nbsp;того чтобы связать диалоги, надо присвоить им&amp;nbsp;имена. В&amp;nbsp;alterator каждый диалог имеет уникальный URL, и&amp;nbsp;имеется таблица соответствий между&lt;br />
этими URL&amp;nbsp;и&amp;nbsp;файлами которые содержат описания диалогов. Основной диалог, с&amp;nbsp;которым происходит запуск приложения всегда должен иметь имя&amp;nbsp;&amp;laquo;/&amp;raquo;&lt;br />
Пусть описание диалога с&amp;nbsp;вопросом будет жить в&amp;nbsp;файле &amp;#8220;q.scm&amp;#8221;, а&amp;nbsp;описание диалога с&amp;nbsp;приглашением &amp;#8220;w.scm&amp;#8221;, назовём первый как&amp;nbsp;требуется правилами &amp;laquo;/&amp;raquo;, а&lt;br />
второй &amp;laquo;/welcome&amp;raquo;.&lt;br />
" начинаем с&amp;nbsp;файла 'q.scm' (или /  - это&amp;nbsp;в&amp;nbsp;файле 'q.scm)'&lt;br />
  /welcome  - это&amp;nbsp;в&amp;nbsp;файле 'w.scm'"&lt;br />
--&lt;br />
--&lt;br />
Сохраним это&amp;nbsp;в&amp;nbsp;файле &amp;#8220;simple_map.scm&amp;#8221;&lt;br />
Теперь создадим описание диалога с&amp;nbsp;приветствием:&lt;br />
&amp;laquo;вертикальная группа в&amp;nbsp;которую вставили:&lt;br />
 - метку &amp;#8220;My first alterator dialog&amp;#8221;&lt;br />
 - горизонтальная группа с&amp;nbsp;меткой &amp;#8220;Your name:&amp;raquo; и&amp;nbsp;полем редактирования по&amp;nbsp; имени username, по&amp;nbsp;умолчанию пустым.&lt;br />
 - кнопка &amp;#8220;OK&amp;#8221;, при&amp;nbsp;нажатии на&amp;nbsp;которую происходит перeключение на&amp;nbsp;URL &amp;laquo;/welcome&amp;#8221;  и&amp;nbsp;передаётся параметр по&amp;nbsp;имени name со&amp;nbsp;значением взятом из&amp;nbsp;поля редактирования  "username.&amp;#8221;&lt;br />
&lt;div class="indent"> Поле редактирования, по&amp;nbsp;умолчанию пустое, описывается как: &lt;i>Formatter &amp;laquo;highlight/edit&amp;raquo; not&amp;nbsp;found&lt;/i>&lt;br />
&lt;/div>&lt;ol type="1">&lt;li> Сказать, поле с&amp;nbsp;именем username, это&amp;nbsp;значит: &lt;!--notypo-->&lt;textarea class="code" rows="2" readonly="readonly">(id 'username (edit &amp;quot;&amp;quot;))&lt;/textarea>&lt;!--/notypo-->
&lt;/li>&lt;li> Сказать что&amp;nbsp;взять содержимое из&amp;nbsp;поля по&amp;nbsp;имени username, это: &lt;i>Formatter &amp;laquo;highlight/username&amp;raquo; not&amp;nbsp;found&lt;/i>
&lt;/li>&lt;li> Сказать, что&amp;nbsp;&amp;laquo;при нажатии перейти ...&amp;raquo;, это&amp;nbsp;значит: &lt;!--notypo-->&lt;textarea class="code" rows="2" readonly="readonly"> (on-click (goto &amp;quot;/welcome&amp;quot; 'name (username text)))&lt;/textarea>&lt;!--/notypo-->&lt;/li>&lt;/ol>
Переключение диалога означает что&amp;nbsp;вы&amp;nbsp;просто заменяете содержимое окна, то&amp;nbsp;есть остаётесь на&amp;nbsp;самом деле в&amp;nbsp;том же&amp;nbsp;самом диалоге, просто с&amp;nbsp;другим содержимым.&lt;br />
Обратите внимание на&amp;nbsp;использование символов, когда мы&amp;nbsp;обрабатываем фразы, содержащие &amp;laquo;имя&amp;raquo;. В&amp;nbsp;конструкции с&amp;nbsp;&amp;#8220;id&amp;#8221; мы&amp;nbsp;имеем просто имя, когда уже&amp;nbsp;забираем текст, у&amp;nbsp;нас в&amp;nbsp;наличие уже&amp;nbsp;не&amp;nbsp;просто имя, а&amp;nbsp;имя связанное с&amp;nbsp;конкретным виджетом, поэтому обращаться к&amp;nbsp;нему можно уже&amp;nbsp;без использования quote.&lt;br />
  (label &amp;#8220;My first alterator dialog&amp;#8221;)&lt;br />
  (hbox&lt;br />
    (label &amp;#8220;Your name:&amp;raquo;)&lt;br />
    (id 'username (edit &amp;quot;&amp;quot;)))&lt;br />
  (button &amp;#8220;OK&amp;#8221;&lt;br />
          (on-click (goto &amp;laquo;/welcome&amp;raquo; 'name (username text)))))&lt;br />
И&amp;nbsp;сохраним в&amp;nbsp;файл &amp;#8220;q.scm&amp;#8221;&lt;br />
Аргументы, которые передавались диалогу доступны через функцию global.&lt;br />
"&lt;br />
  &amp;ndash; метки, текст которой есть соединение &amp;#8220;Welcome " и&amp;nbsp;значения переданного  параметра по&amp;nbsp;имени name.&lt;br />
  - кнопки &amp;#8220;OK&amp;#8221;, при&amp;nbsp;нажатие на&amp;nbsp;которую происходит завершение работы  диалога (и соотв. завершение работы вообще)&lt;br />
"&lt;br />
Вот&amp;nbsp;содержимое файла &amp;#8220;w.scm&amp;#8221;:&lt;br />
  (label (string-append &amp;#8220;Welcome "&lt;br />
                        (global 'name)))&lt;br />
  (button &amp;#8220;OK&amp;#8221;&lt;br />
          (on-click (end-dialog))))&lt;br />
Теперь произведём запуск одного комнонеты alterator которая собственно занимается диалогом с&amp;nbsp;пользователем &amp;#8220;lookout -m simple_map.scm&amp;#8221;.&lt;br />
Всё &amp;ndash; ваше первое приложение под&amp;nbsp;alterator готово. Согласитесь, что&amp;nbsp;за&amp;nbsp;три лекции мы&amp;nbsp;уже кое-чему научились.&lt;/div>&lt;/div>
</description>
</item>
<item>
<title>2005-07-20 00:45:10</title>
<link>http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3/show?time=2005-07-20+00%3A45%3A10</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/3&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;3&lt;/a> за &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2005-07-20+00%3A45%3A10">2005-07-20 00:45:10&lt;/a> и &lt;a href="http://freesource.info/wiki/AltLinux/Sisyphus/Alterator/internals/3?time=2005-07-20+00%3A48%3A34">2005-07-20 00:48:34&lt;/a>&lt;/b>&lt;br />
&lt;br />
&lt;b>Добавлено:&lt;/b>&lt;br />
&lt;div class="additions">&lt;span class="missingpage">Продолжение будет ...&lt;/span>&lt;a href="http://freesource.info/wiki/4/edit?add=1&amp;" title="Создать эту страницу">?&lt;/a>&lt;/div>&lt;br />
&lt;b>Удалено:&lt;/b>&lt;br />
&lt;div class="deletions">Продолжение будет ...&lt;/div>&lt;/div>
</description>
</item>
</channel>
</rss>
