Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алгоритмы вокруг нас.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
13.11 Mб
Скачать

§ 3. Буквы, связи, оболочки, конструкции

Если мы хотим употреблять термин «язык программ», а это нам нужно, чтобы считать программы алгоритмами, мы должны допускать возможность очень сложной структуры предложений языка. Автор думает, что полезность трактов­ки программ для ЭВМ как алгоритмов уже не вызывает у читателя сомнений, и потому не будет второй раз ее обосно­вывать.

Читатель помнит, что программа, размещенная в машине, состоит из команд, среди которых присутствуют и команды перехода, причем связь между командами программы уста­новлена с помощью команд перехода и определенного раз­мещения команд в оперативной памяти. Все эти связи мож­но проследить и в программе, написанной на бумаге.

В последнем случае вместо особого способа размещения команд мы имеем (даже более наглядный) способ обозначе­ния их связей с помощью собственных адресов (и, конечно, команд перехода).

Анализируя программы, мы видим, что основным строи­тельным материалом для них являются символы (в теории алгоритмов мы их называли буквами). Из этих букв обра­зованы более сложные конструкции (элементы кода про­граммы: адреса и код операций), являющиеся словами. Эти слова объединены в системы, называемые командами. При­чем даже в составе команды каждое из указанных слов сох­раняет свою индивидуальность. Команды можно считать словами, о разделении которых на более простые слова за­дана информация. Но это неудобно, так как равносильно тому, что каждая команда имеет к себе «примечание». Лучше считать команду структурной, образованной не непо­средственно из букв, а из более простых слов. Приказ имеет аналогичную, но еще более усложненную структуру. На­конец, программа на бумаге есть некоторая конструкция, образованная из приказов. Можно считать, что любая про­грамма построена с помощью элементов трех видов: букв, связей, которые могут связывать буквы и еще некоторые другие объекты (чуть ниже мы их назовем), и оболочек, ко­торые могут «облекать» (объединять в одно целое) конструк­ции, полученные с помощью связей из букв или из простых конструкций, заключенных в оболочки (именно эти объек­ты мы имели в виду несколько выше). Те объекты, которые могут быть связаны связями, будем называть конструктив­ными элементами. Таким образом, заключая некоторую кон­струкцию в оболочку, мы тем самым превращаем ее в кон­структивный элемент, из которого можно образовывать бо­лее сложную конструкцию.

Приведенное описание несколько туманно. Сформули­руем его более точно в виде следующих пунктов.

1. Конструктивным элементом является либо отдельная буква, либо конструкция, заключенная в оболочку.

2. Конструкцией называется либо пустое множество, либо несколько конструктивных элементов, связанных несколькими связями так, что «способности» связей к свя­зыванию полностью использованы (связи насыщены), а любые два конструктивных элемента можно соединить це­почкой из конструктивных элементов и связей (конструк­тивные элементы связаны).

Нужно точнее пояснить, что мы понимаем под буквами,

оболочками и связями.

Буквы — это применяемые нами символы, которые в процессе их использования уже нельзя делить на части или как-либо деформировать.

Оболочки являются подобием скобок. По существу, открывающая и закрывающая скобки, рассматриваемые вместе, являются не чем иным, как оболочкой, облекаю­щей некоторую строку символов. Нам пришлось пойти на такое видоизменение скобок в связи с тем, что среди конструкций мы будем допускать более сложные, чем цепоч­ки букв или других конструктивных элементов.

Наконец, связи — это условные знаки, обозначающие взаимодействие между конструктивными элементами. По­нятие связи так же естественно, как и понятие буквы. Связи мы постоянно наблюдаем, хотя до сих пор не гово­рили о них.

В слове «мама» присутствуют три вида связей, которые в своей совокупности образуют связи следования букв. В этом слове связи не изображены никакими символами. Они переданы особым расположением букв. Тем не менее они там есть. Если ввести символы для обозначения связей следования букв, обозначив их соответственно через и , то слово «мама» следует представить в виде

Здесь означает «одноместную» связь, называемую начинающей, знак означает «двухместную» связь, называемую продолжающей.

Наконец, знак означает «одноместную» связь, назы­ваемую заканчивающей.

Однобуквенное слово «а» (союз) имеет вид:

В нем нет продолжающих связей, но есть начинающая и заканчивающая.

Мы, говоря о связях, иногда будем их обозначать особыми знаками, иногда будем передавать особым способом расположения конструктивных элементов, но всегда будем иметь в виду их наличие.

Читателю следует обратить внимание на то, что, фиксируя и учитывая наличие связей, мы начинаем глубже понимать структуру предложении языка, начинаем в ряде случаев улавливать различия, которые без учета связей остаются незаметными. Например, буква «а» и слово являются конструкциями различного вида. Не замечая связей, мы не замечаем и этого различия. В некоторых случаях подобное различие бывает существенным.

Кроме связей следования букв, нам очень знакомы (и одновременно очень незнакомы) многие другие связи. На­пример, введем обозначения для начинающей, продолжающей и заканчивающей связи между словами. В фразе «Мама идет» присутствуют такие связи.

бы речь шла о наручниках, с помощью которых человека можно сковать со слоном. Здесь была бы связь второго ран­га и второго жанра («ветви» связи были бы различны). Ремни, висящие во многих автобусах и предназначенные для того, чтобы стоящий пассажир во время движения за них держался, можно считать связями второго ранга и вто­рого жанра. При этом одна ветвь «связывает» автобус, а другая «связывает» пассажира.

Итак, теперь мы имеем достаточно ясно представление о связях. Подчеркнем только еще раз, что если два конст­руктивных элемента связаны ветвями одинакового жанра какой-либо связи, то невозможно отличить, какая из ветвей соответствует любому из них. Обмен между ними одинако­выми ветвями не вызвал бы никаких перемен.

Оболочку можно считать особым видом буквы. Если некоторая конструкция заключена в оболочку, то удобно считать, что каждый конструктивный элемент этой конст­рукции связан некоторой связью с оболочкой. Эти связи мы для упрощения явно не указываем, но можем сказать, каковы они: они все одинаковы, так что оказать предпочте­ние тому или другому из конструктивных элементов они не позволяют. Кроме того, эти связи имеют второй ранг и второй жанр и всегда одинаково подключены к оболочке именно своими ветвями первого жанра.

Если какой-либо конструктивный элемент является конструкцией, облеченной в оболочку, то связи, которые его связывают «в целом», своими ветвями «подключены» к его оболочке. Мы допустим расширение понятия конст­рукции, если скажем, что после того, как конструкция по­лучена способом, описанным в ее определении выше, можно наложить на нее еще некоторое количество связей, «прони­кающих» сквозь оболочки ее конструктивных элементов на какую угодно глубину. То, что получится, снова будем на­зывать конструкцией и допускать в качестве строительного материала для более сложных конструкций. Заметим только, что если все связуемые элементы какой-либо связи находятся внутри некоторой оболочки, то считается, что она сама тоже находится внутри этой оболочки. На рис. 16 приведена схема конструкции, образованной из букв с помощью оболочек и связей. На этом рисунке α, β, γ — имена связей, кроме того, показаны связи следования букв, имена которых не обозначены. Замкнутые линии изобража­ют собой оболочки. Одна из оболочек, связанная ветвью жанра 3 связи α, облекает собой пустую конструкцию. Связь β проникает ветвью второго ранга через две оболочки, На практике обыч­но встречаются менее за­мысловатые конструк­ции, чем показанная на рис. 16, например, «деревья» и «кольца», образованные с помо­щью связей следования из букв, матрицы и т. п. Эти виды конструкций пояснены на рис. 17.

В некоторых случа­ях удобно ограничить класс рассматриваемых конструкций. С этой целью задают алфавит букв, алфавит (пере­чень) связей и знак, являющийся обозначе­нием оболочки. При этом алфавиты считают не только перечнями, но учитывают и порядок расположения в них перечисляемых элементов. Другими словами, алфави­ты можно считать словами, но по отношению к «языку» рассматриваемых конструкций будем их считать метасловами (т. е. словами, принадлежащими метаязыку).

Условным обозначением класса конструкций является запись (А, В, Σ), в которой А — алфавит букв, В — алфавит свя­зей, Σ — символ, говорящий о возможности применения оболочек. В конкретных случаях вместо А и В могут быть записаны в виде слов конкретные алфавиты, а символ Σ всегда будет включаться без всякой конкретизации.