ПРОГРАММА жизнь - сон; глобальная переменная v: (жизнь, сон); ПРОЦЕДУРА Р (х: (жизнь, сон)); локальная gеременнал и: (жизнь, сон); НАЧАЛО и:-х; ГЕНЕРИРОВАТЬ (и) class="underline" ЕСЛИ и жизнь ТО вызвать Р (сон) ИНАЧЕ вернуться; v: жизнь; ГЕНЕРИРОВАТЬ (и); ПЕРЕХОД НА l КОНЕЦ (процедуры Р) НАЧАЛО (тело программы) вызвать Р (жизнь) КОНЕЦ
Здесь и - локальная переменная. При каждом вызове процедуры Р создается своя новая переменная
=======================================================
(95) Дейкстра Е. Эссе о понятии область действия переменных // Дисциплина программирования.- М.: Мир.
=====================================================
под именем и, доступная внутри вызванной процедуры. С исчезновением процедуры исчезает и локальная переменная. Переменная v глобальна, она передается от процедуры к процедуре и определяет субъективное восприятие жизни и сна. Величины и и v можно было бы считать наборами переменных, соответствующих процессам жизни и сна. Только для удобства и упрощения считаем их здесь одномерными переменными. Процедура ГЕНЕРИРОВАТЬ (и) задает действия, которые выполняются при заданном значении и. Можно считать, что эта процедура генерирует текст, соответствующий рассматриваемому периоду существования. Команда вернуться означает закрытие процедуры Р. После завершения выполнения вызванной процедуры вызывающая процедура продолжит свою работу, начиная со следующей после вызова команды. Значения переменной v могут меняться процедурой ГЕНЕРИРОВАТЬ. Единственное, что всегда выполняется,- установка v на жизнь после окончания сна. В этой программе сон - особый период жизни. Последовательность выполнения команд в программе жизнь - сон следующая:
вызвать Р (жизнь); жизнь и1: жизнь;
ГЕНЕРИРОВАТЬ (жизнь);
вызвать Р (сон);
сон и2: сон;
ГЕНЕРИРОВАТЬ (сон);
вернуться;
жизнь v: жизнь;
ГЕНЕРИРОВАТЬ (жизнь); * вернулись к значе
нию и1 жизнь *
жизнь
вызвать Р (сон); сон и3: сон;
ГЕНЕРИРОВАТЬ (сон);
вернуться; жизнь v: жизнь;
ГЕНЕРИРОВАТЬ (жизнь);
вызвать Р (сон);
сон и4: сон;
ГЕНЕРИРОВАТЬ (сон);
вернуться;
Как видим, жизнь сменяется сном, сон жизнью - и все повторяется вновь. Произведем следующее преобразование программы жизнь - сон: заменим везде слова жизнь на сон, а сон на жизнь. Тогда сон будет главной процедурой, периодически вызывающей жизнь. Получаем симметричную программу сон - жизнь. В ней жизнь - некоторый период, существующий внутри первого вызова сна. Какая из программ (жизнь - сон или сон - жизнь) адекватно моделирует действительность? Об этом много рассуждали философы от античности до наших дней. Все дело только в симметричной замене имен. Такое преобразование иногда используют как литературный прием. Для героя рассказа В. Брюсова "Теперь, когда я проснулся" главным был сон. В своих снах он безнаказанно совершал ужасные злодеяния. Это занятие так его увлекало, что он научился специально вызывать сны. Жизнь была только короткой необходимой подгоговкой ко сну и тоже воспринималась как этап сна. В итоге он в реальной жизни совершил кровавое убийство, думая, что все происходит во сне. Произошло несоответствие значений глбальной переменной, определяющей субъективное восприятие действительности, и локальной, задающей фазы реальности. У Борхеса в рассказе "Книга руин" маг снов в конце жизни понял, что он только призрак, который видится кому-то во сне. В том сне, начавшемся вызовом программы сон - жизнь, жизнь и сон мага были только подпрограммой процедуры ГЕНЕРИРОВАТЬ (сон). Граница между действительностью и сном может быть расплывчатой, не обозначенной четко. Поэтому часто авторы задают постепенную трансформацию значений тех или иных переменных в свою противоположность. Для моделирования подобных явлений необходимо вводить градацию степеней сна и ральности. Например, можно считать сон выражаемым отрицательным числом, а жизнь - положительным. Чем ближе сон к нулю, тем он ближе к жизни. И наоборот, жизнь переходит в сон, если значение жизни постоянно уменьшается. Если ввести несколько дополнительных переменных, легко модифицировать программу жизнь - сон таким образом, чтобы локальная сигнализирующая переменная и постепенно изменялась, переходила в свою противоположность. Если при этом значения v не менять, получим процесс, описывающий постепенное изменение жизни на сон, а сна на жизнь, и при этом человек в конце концов воспринимает себя во сне, а свою прошлую жизнь с удивлением осознает как сон. Такой эффект достигается в случае, если процедура ГЕНЕРИРОВАТЬ (сон) порождает текст, связанный с определенными событиями, временем и местом, а ГЕНЕРИРОВАТЬ (жизнь) порождает текст с другими атрибутами существования. Тогда в результате выполнения указанного преобразования человека со значением v, равным жизнь, вступает в процедуру ГЕНЕРИРОВАТЬ (сон). В силу ограниченности объема изложеиия мы не приводим подробное описание этой программы. Такое преобразование также описывалось в литературе. Пример - уже упоминавшийся рассказ Кортасара "Ночью, на спине, лицом кверху". Как задать постепенный переход одного объекта в другой мир, например объект из жизни включить в сон? Для этого нужно совершить следующие изменения в программе жизнь - сон. Локальная переменная и не затрагивается. Зато глобальная переменная, соответствующая бытию объекта, заменяется на две связанные компоненты. Первая свидетельствует о степени присутвия в жизни, а вторая определяет степень принадлежности ко сну. Каждый раз во время сна необходимо уменьшать первую компоненту и увеличивать вторую. Процедура ГЕНЕРИРОВАТЬ реагирует на эти изменения, порождая соответствуюшие описания погружений в сон. Отличие этого преобразования от предыдущего, описанного выше, в том, что меняется сам человек, а не мир. Аналогичным образом, выполняя согласованные действия с двумя двухкомпонентными переменными, можно добиться синхронной замены объектов из сна и жизни. Это распространенный прием в литературе. Иногда сон заменяется зеркалом или книгой. Аналогом сна выступает таинственное зазеркалье или текст волшебных книг. В рассказе Брюсова "Зеркало" с переменным успехом борются за право присутствия в мире две женщины - реальная и ее зеркальное отражение. В рассказе Кортасара "Аксолотль" человек, пристально наблюдающий в аквариуме неподвижное лицо водной личинки, вдруг ощущает себя поменявшимся с ней местами.
"Я видел очень близко, за стеклом, неподвижное лицо аксолотля. Без перехода, без удивления я увидел за стеклом свое лицо, вместо лица аксолотля увидел за стеклом свое лицо, увидел другую сторону стекла. Потом мое лицо отодвинулось, и я понял... Я был аксолотлем и теперь мгновенно узнал, что никакое понимание невозможно" (96).
Если в процедуре ГЕНЕРИРОВАТЬ (жизнь) описывать определенные события и с некоторым опережением задавать их в процедуре ГЕНЕРИРОВАТЬ (сон/зеркало), получим эффект вещих снов (зеркал, книг). Аналогичное можно выполнить и с прошлым. Если постепенно сближать описания событий в этих двух процедурах и в итоге генерировать один заключительный текст, получится как бы слияние предсказанного будущего (или известного прошлого) с настоящим. Подобный прием наблюдаем у многих писателей. Маркес в своем рекурсивном романе "Сто лет одиночества" заканчивает повествование эпизодом, когда последний из рода Буэндиа расшифровывает последние страницы волшебной книги Мелькиадеса, оказавшейся описанием событий рода Буэндиа и города Макондо. По мере приближения к концу поднимается ураган, тоже описанный в книге, и с последней строчкой все исчезает - город Макондо, род Буэндиа и вещая книга. Опять у Борхеса в рассказе "Чернильное зеркало" правитель зачарованно наблюдает собственную смерть в чернильном отражении. Когда палач в зазеркалье опускает меч на голову осужденного, правитель тоже падает мертвый. В "Мастере и Маргарите" Булгакова события прошлого алгоритмический модуль Иешуа - Пилат - вызываются из основной темы. Здесь действует одна рекурсивная процедура Р (х), функционирующая аналогично программе жизнь - сон. Процедура Р (Мастер и Маргарита) вызывает процедуру Р (Иешуа и Пилат). В конце все времена встречаются в последнем пристанище. Можно пойти дальше. Любые игры с переменными допустимы. Можно задавать независимые или зависимые друг от друга изменения локальных и глобальных переменных в программе жизнь - сон. Можно в качестве имен добавлять новые миры. Таким способом можно получать странные переходы жизни в сон,