Информационный сайт

 

Реклама
bulletinsite.net -> Книги на сайте -> Программисту -> Непейвода Н.Н. -> "Основания программирования " -> 258

Основания программирования - Непейвода Н.Н.

Непейвода Н.Н., Скопин И.Н. Основания программирования — Институт компьютерных исследований , 2002. — 919 c.
Скачать (прямая ссылка): osnovanprogramm2002.pdf
Предыдущая << 1 .. 252 253 254 255 256 257 < 258 > 259 260 261 262 263 264 .. 316 >> Следующая

в закл чение рассмотрим достаточно сло нй алгоритм на Рефале, иллюстрирующий многие приемы программирования. Пусть у нас дано выражение с различными парными скобками (в конкретном случае мы используем пары '()[]{}<>', но программа составлена так, чтобы эти пары можно было заменить в любой момент). Для эффективной работа на Рефале это вы-ра ение ну но закодировать, используя структурные скобки. одом пары скобок Левая Правая будут скобки (Левая и Правая). Ниже дан алгоритм кодировки.
При записи данного алгоритма используется еще одна возможность Ре-фала-5. После образца через запятую может идти произвольное выражение, вкл чаее свободне переменные образца, а затем другой образец. Во втором образце мы отождествляем вспомогательное выражение, не изменяя значений переменных, унаследованных из предыдущего образца. Если после второго образца идут фигурные скобки, то м задаем безымянну функци внутри функции. Если е их нет, то это ото дествление рассматривается как дополнительное условие успености первого ото дествления. Эта иерархия вло енности мо ет продолаться на несколько уровней, причем переменные внешних уровней на внутренних уровнях остаются связанными, уже не изменяя значений.
Иерархически вложенные функции и условия в принципе не нужны для Рефала, но их использование позволяет сократить и, главное, луче структурировать текст программ .
Программа 13.1.2 Мультискобочное выражение: Рефал
13.1.
743
$ENTRY Go{=<Init>;} $EXTRN Xxout;
* Инициализация поля зрения и констант Init{=<Open 'r' 1 'Input.txt'><Trans <Acquire(<Get 1>)»;} Acquire {
e.Got ()= e.Got;
* Конец ввода - пустая строка
e.Got (e.New)=<Acquire e.Got e.New (<Get 1>)>;
}
Brackets {=('()')('[]')('')('<>');} Trans {
e.A =<Result <Pairing () e.A > >;
}
Pairing {
* В первой скобке содержится последовательность всех незакрытых
* скобок вместе с сегментами даннх, подлеаими помеени
* в данную пару скобок;
* каждый сегмент данных также заключен в скобки (e.Unclosed (e.LastUn)(s.Lbrack e.Middle)) s.Rbrack e.Last,
<Brackets>: e.A(s.Lbrack s.Rbrack) e.B =
* Встретилась правая скобка, парная последней незакрытой;
* выбрасываем отработанный сегмент из поля зрения
<Pairing (e.Unclosed (e.LastUn (s.Lbrack e.Middle s.Rbrack))) e.Last>; ((s.Lbrack e.Middle)) s.Rbrack e.Last,
<Brackets>: e.A(s.Lbrack s.Rbrack ) e.B =
* Парная незакрытой, находящейся внутри другой незакрытой
(s.Lbrack e.Middle s.Rbrack) <Pairing () e.Last>; (e.Unclosed (e.LastUn)(s.Lbrack e.Middle)) s.Rbrack e.Last, <Brackets>: e.A(s.Lbrack1 s.Rbrack ) e.B =
* Непарные скобки
<Prout "Brackets Mismatch!"> Error; (e.Unclosed ) s.Lbrack1 e.Last,
<Brackets>: e.A(s.Lbrack1 s.Rbrack ) e.B =
* Ее одна открываая скобка; создаем нову группу даннх
<Pairing (e.Unclosed (s.Lbrack1)) e.Last>; () s.Lbrack e.Last,
<Brackets>: e.A(s.Lbrack s.Rbrack ) e.B =
* Первая открывающая скобка
744
13.
<Pairing ((s.Lbrack)) e.Last>; () s.Rbrack e.Last,
<Brackets>: e.A(s.Lbrack s.Rbrack) e.B =
* Первая скобка - закрывающая
<Prout "Extra right bracket"> Error;
* Нейтральный символ вне скобок
() s.Other e.Last = s.Other <Pairing () e.Last>;
* Выражение и скобки исчерпаны - успех () =;
* Выражение исчерпано, а скобки - нет
(e.Unclosed (e.Lastun))=<Prout "Not all brackets are closed» Error;
* Нейтральный символ в очередной скобке (e.Unclosed (e.Lastun))s.Other e.Last=
<Pairing (e.Unclosed(e.Lastun s.Other)) e.Last>;
}
Result {
* Если была ошибка, выйти e.A Error=;
* наче вывести результат для дальнейего использования e.A =<Xxout ('output.rdt') e.A>;
}
Чтобы нагляднее увидеть влияние стиля на программные решения, сравните эту программку с развитием программы в традиционном стиле, приведенным в § 11.5. Данная программа намного выразительнее, короче. легче модифицируема и не менее эффективна, чем программа 11.5.3.
13.1.4. Развитие языка и его диалекты
Созданный в теоретической работе Турчина язык сразу же поменял свою конкретно-синтаксическую форму для удобства представления и работа. Язык Рефал-2 длительное время бл практическим стандартом Рефал-систем. В нем появились ввод-ввод и стеки закопанных даннх.
В языке Рефал-4 было сделано две попытки. Одной из них была попытка достаточно механически совместить Рефал с нарождавшимися объектно-ориентированными средствами, которая бстро завела в тупик и бла оставлена. ругой было определение метаопераций, которое доказало сво из-неспособность. В языке Рефал-5 [90], который сейчас является фактическим
13.1.
745
стандартом, объект были отброены, зато последовательно была проведена как стандартная надстройка над языком идея метакодирования. В нем получили свое окончательное оформление вложенные процедуры и дополнительные условия.
Из других существующих версий языка стоит отметить Рефал-6 и Рефал+ [28], которые развивают одну и ту же линию. В реализации Рефал+ отошли от представления, принятого в [69], с тем, чтобы воспользоваться современными алгоритмами сборки мусора. Вместо стеков закопанных значений в этих языках предлага тся объекты, которе име т лиь одно значение. В частности, такие объект использу тся для описания графического ввода и ввода, что полность игнорируется в стандартном Рефале. алее, имеется возможность объявить функцию откатной, и пытаться при невозможности отождествлений обработать неудачу. Но автор этих языков проигнорировал концептуальну несовместимость неудач с обей структурой управления в языке Рефал. з находок авторов Рефал+, помимо новой структуры данных, стоит отметить использованну нами концепци упорядочения возможных отождествлений и возможность до некоторой степени управлять этим упорядочением (правда, в языке предусмотрен лишь переход от прямого порядка к его обраени , но у е это дает в некоторых случаях боль-
Предыдущая << 1 .. 252 253 254 255 256 257 < 258 > 259 260 261 262 263 264 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100