Затем следует часть Б. В результате тематического сдвига, мелодия здесь начинается с «ре», словно «ре» являлось тоникой с самого начала — но в конце концов, мелодия модулирует обратно в «соль»; это означает, что мы выталкиваемся обратно в тонику, и что часть Б оканчивается именно так, как надо. Тут случается это забавное повторение, отбрасывая нас, безо всякого предупреждения, назад к «ре», и затем возвращаясь к «соль» еще раз. Тут случается это забавное повторение, отбрасывая нас, безо всякого предупреждения, назад к «ре», и затем возвращаясь к «соль» еще раз.
Психологический эффект, достигаемый этими переходами, то внезапными, то плавными, трудно описать. Магия музыки отчасти и заключается в том, что мы способны автоматически уследить за этими переходами. А может быть, это магия Баха, сумевшего внести такую грацию в эту сложную структуру, что мы даже не замечаем, что именно там происходит.
Баховский «Маленький гармонический лабиринт» — это пьеса, в которой композитор пытается запутать слушателя быстрой сменой ключей. Вскоре вы настолько сбиты с толку, что совершенно теряете ориентацию. Вы не знаете, где настоящая тоника, если только у вас нет абсолютного слуха или вы, подобно Тезею, не прибегаете к помощи друга, который, словно Ариадна, дал бы вам нить, ведущую к началу. В данном случае, такой нитью являлись бы ноты. Эта пьеса, наряду с Естественно Растущим Каноном, показывает, что у нас, как у слушателей музыки, отсутствуют надежные глубокие стеки.
Рекурсия в языке
Наш интеллектуальный стек, пожалуй, более надежен для работы с языком. Грамматическая структура всех языков включает весьма сложные схемы для проталкивания в стек; трудность фразы, разумеется, возрастает с количеством проталкиваний. Знаменитое немецкое явление «глагола-в-конце», о котором забавные истории о рассеянных профессорах, начинающих фразу, продолжающуюся все лекцию, и под завязку выдающих цепочку глаголов, в которой аудитория, давно потерявшая нить в этом стеке, не видит никакого смысла, часто рассказываются, представляет из себя прекрасный пример лингвистического проталкивания и выталкивания. Замешательство в аудитории, которое неправильное выталкивание из стека, куда были сложены глаголы профессора, забавно вообразить, может произвести. Однако в повседневном немецком такие глубокие стеки почти никогда не встречаются; на самом деле, немцы частенько невольно нарушают правила, проталкивающие глагол в конец, с тем, чтобы избежать усилий, связанных с напряжением внимания в течение всей фразы. В любом языке имеются конструкции, где задействованы стеки, хотя обычно не такие впечатляющие, как в немецком. При этом всегда имеется возможность перефразировать предложение таким образом, чтобы уменьшить глубину стека.
Схемы рекурсивных переходов
Синтаксическая структура предложений хорошо подходит для метода описания рекурсивных схем и процессов — этот метод называется Схемой Рекурсивных Переходов (СРП). СРП представляет из себя диаграмму, показывающую различные пути для выполнения данного задания. Каждый такой путь состоит из нескольких узлов — маленьких квадратов, в которых что-то написано. Узлы соединены ребрами, или стрелками. Общее название данной СРП написано отдельно, слева от диаграммы, и в первом и последнем узле написано, соответственно, начало и конец. Остальные узлы содержат либо краткие инструкции, либо названия других СРП. Попав в определенный узел, вы должны либо выполнить указания, в нем написанные, либо перейти в указанную в нем СРП и работать уже там.
Возьмем простую СРП, под названием УКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ, которая говорит нам, как создать определенную русскую фразу (см. рис. 27а) Двигаясь по схеме горизонтально, мы попадаем в начало, затем создаем прилагательное, затем — существительное, и затем приходим к концу. Например, «глупое мыло», или «неблагодарная закуска». Но ребра позволяют и другие возможности, например, повторить или совсем опустить прилагательное. Так мы можем сконструировать «молоко» или «огромная красная голубая зеленая зевота» и так далее.
Находясь в узле имя существительное, вы просите некий черный ящик под названием имя существительное выдать вам любое существительное с его склада. В компьютерной терминологии это называется процедурой вызова. Это означает, что вы временно передаете контроль некой процедуре (здесь, СУЩЕСТВИТЕЛЬНОМУ), которая 1) выполняет свою инструкцию (производит существительное) и 2) передает контроль вам обратно. В нашей СРП есть вызовы для двух таких процедур имя существительное и ИМЯ ПРИЛАГАТЕЛЬНОЕ. Обратите внимание, что СРП УКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ может, в свою очередь, быть вызвана из какой-либо другой СРП — например, ПРЕДЛОЖЕНИЕ. В этом случае, схема УКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ произвела бы «глупое мыло» и вернулась бы на свое место в предложении, откуда она была вызвана. Эта ситуация напоминает примеры со вложенными один в другой телефонными звонками или фрагментами новостей, где вы возвращаетесь к прерванному занятию.
Однако, хотя мы и назвали это «схемой рекурсивных переходов», мы еще не привели примера настоящей рекурсии.
Ри. 27. Схема рекурсивных переходов для УКРАШЕННОГО СУЩЕСТВИТЕЛЬНОГО И СВЕРХУКРАШЕННОГО СУЩЕСТВИТЕЛЬНОГО.
Рекурсия — и, по видимости, кругообразность — появляется тогда, когда мы переходим к такой СРП как СВЕРХУКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ (Рис 27б). Как вы заметили, любая дорожка к СВЕРХУКРАШЕННОМУ СУЩЕСТВИТЕЛЬНОМУ проходит через узел УКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ — таким образом, у нас обязательно появится какое-либо существительное. Мы можем на этом закончить и прийти к ФИНИШУ с «молоком» или «огромной красной голубой зеленой зевотой». Но остальные три пути к финишу сами включают рекурсивный вызов СВЕРХУКРАШЕННОГО СУЩЕСТВИТЕЛЬНОГО. Это выглядит как порочный круг — определение чего-либо в терминах его самого. Действительно ли это происходит? На этот вопрос мы ответим так: «Да, но это не страшно.» Представьте, что в процедуре ПРЕДЛОЖЕНИЕ есть узел, вызывающий СВЕРХУКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ, и мы попадаем именно в этот узел. Это означает, что мы прежде всего запоминаем (проталкиваем в стек) место этого узла внутри ПРЕДЛОЖЕНИЯ, чтобы знать, куда нам вернуться; после этого, мы переходим к самой процедуре СВЕРХУКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ — мы должны найти способ его сконструировать. Предположим, что мы выбираем нижнюю из двух верхних дорожек:
УКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ, ОТНОСИТЕЛЬНОЕ МЕСТОИМЕНИЕ, СВЕРХУКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ, ГЛАГОЛ.
Итак, за дело: сначала мы выдаем «на-гора» УКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ: «странные бублики»; затем, относительное местоимение: «которые»… теперь мы должны воспроизвести СВЕРХУКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ — но ведь мы как раз и находимся в процессе создания СВЕРХУКРАШЕННОГО СУЩЕСТВИТЕЛЬНОГО! Это верно, но вспомните наш пример с директором, которому позвонили в середине другого телефонного разговора. Он «отложил» первый разговор в стек и начал новую беседу так, словно ничего необычного не случилось. Давайте и мы сделаем так же.
Прежде всего запасемся обратным адресом: запишем в стек, в каком узле мы находились во время второго вызова СВЕРХУКРАШЕННОГО СУЩЕСТВИТЕЛЬНОГО. Затем снова перейдем в начало схемы, словно ничего необычного не случилось. Теперь мы должны снова выбрать путь. Давайте, для разнообразия, попробуем пройти по нижней дорожке: УКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ, ПРЕДЛОГ, СВЕРХУКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ. Это значит, что сначала мы производим УКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ (например, «пурпурная корова»), затем ПРЕДЛОГ (например, «без»)… и опять упираемся в рекурсию. Придется нам снова спуститься уровнем ниже — смотрите не споткнитесь! Чтобы избежать осложнений, давайте на этот раз выберем прямую дорогу. УКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ (например, «рога»). Этот вызов тут же попадает в узел КОНЕЦ, что позволяет нам вытолкнуться на предыдущий уровень. Мы обращаемся к стеку за обратным адресом, который отсылает нас к фразе «пурпурная корова без». Закончив дела на этом уровне и попав в узел КОНЕЦ, мы выталкиваемся еще раз. Теперь нам необходим ГЛАГОЛ (например, «слопала»). На этом вызов СВЕРХУКРАШЕННОГО СУЩЕСТВИТЕЛЬНОГО на высшем уровне заканчивается. У нас получилась фраза:
«странные бублики, которые пурпурная корова без рогов слопала».
Когда мы вытолкнемся в последний раз, эта фраза будет передана наверх, к терпеливо ожидающей схеме ПРЕДЛОЖЕНИЕ.
Как видите, бесконечной регрессии не произошло, так как по крайней мере на одной из дорожек внутри СРП СВЕРХУКРАШЕННОЕ СУЩЕСТВИТЕЛЬНОЕ мы не встретились с вызовом самого СВЕРХУКРАШЕННОГО СУЩЕСТВИТЕЛЬНОГО. Конечно, мы могли бы упорствовать в выборе нижней дорожки внутри СВЕРХУКРАШЕННОГО СУЩЕСТВИТЕЛЬНОГО — тогда бы нам никогда не удалось закончить работу, подобно тому, как нам не удалось полностью раскрыть сокращение БОГ. Однако если мы выбираем дорожки наугад, подобной бесконечной регрессии не случается.