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

 

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

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

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

<Br e.N '=' e.E >
рассматривает свой первый аргумент, которй дол ен бть строкой символов, не вкл чаей '=', как имя стека, и помеает свой второй аргумент на вершину этого стека. Если стек был пуст, то он создается. Соответственно, функция
<Dg e.N>
вкапывает верхуку стека. Если стек пуст, то оибки нет, просто вдается пустое вра ение. есколько других функций дополня т возмо ности работы с глобальной информацией. Cp копирует верхуку стека без ее удаления, Rp замещает верхушку стека на свой аргумент, DgAll выкапывает сразу весь стек4.
4 ( . . копин) илая тучка! Сразу видно, что она для тех случаев, когда запутваеься!
740
13.
Ввод-вывод организован в Рефале достаточно аскетически. Имеется функция открытия канала ввода, которая открывает файл либо для ввода, либо для вывода (в этом случае первым аргументом служит 'r') и присваивает ему номер .Одна строка символов из файла читается с помощью функции Get, за-меняей свой взов на прочитанну строку, одна строка пиется в файл путем функций
<Put s.Channel e.Expression>
либо
<Putout s.Channel e.Expression>
торая функция стирает свое поле зрения, а первая оставляет в качестве результата напечатанное вра ение.
Следует заметить, что эти функции читают и пишут именно последовательности символов. При их использовании программист должен сам преобразовать последовательности цифр в числа, а скобки-символ в структурные скобки. Более того, при выводе часть информации теряется: невозможно различить последовательность букв и идентификатор, последовательность цифр и число, структурные скобки и скобки-символы. Поэтому имеется еще одна совокупность функций, автоматизирующих преобразование. Каждая из этих функций обрабатвает сбалансированное по скобкам выра ение. ри вводе это выра ение заканчивается пустой строкой.
<Input s.Channel> или <Input e.File-name> <Xxin e.File-name>
<Xxout s.Channel e.Expr> или <Xxout (e.File-name)e.Expr>
ервая из функций предназначена для ввода подготовленнх вручну файлов, вторая и третья — для обмена с диском промеуточной информацией.
Только что перечисленные функции вместе с функцией Go требуют объяснения инструментов модульности в Рефале. Рефал-модуль — просто Ре-фал-программа, не обязательно вкл чаая Go. ункции, предоставляемые в пользование другим модулям, описва тся как входы, описанные спецификатором $ENTRY. В свою очередь. использующий модуль должен описать внешние функции:
$EXTRN F1,F2,F3;
ызов программ , состояей из нескольких модулей, производится оператором примерно следуего вида: refgo progl+functions+reflib
13.1.
741
одуль основной программы дол ен идти первм. икаких средств вкл чить требование вызова модуля в текст другого модуля нет, модули сопрягаются внешним образом. При конфликтах имен берется определение функции из первого в порядке подкл чения модуля.
В частности, только что описанные расиренне функции ввода-вывода определяются в стандартном модуле reflib.
Важнейшими средствами современного Рефала является работа с мета-выражениями. Базовое ее средство — встроенная функция Mu, которая за-кл чает свой аргумент в функциональные скобки и тем самм дает возмо -ность вчислить динамически построенное вра ение. о словам Турчина, Mu работает так, как работало бы определение
Mu { s.F e.X = <s.F e.X> },
если б оно бло синтаксически допустимо.
В частности, через Mu работает стандартный модуль Рефала e (Evaluation), даий возмо ность вычислить динамически введенное вра ение. н обрабатывает это выражение через функцию Upd, которая должна быть добавлена к модул , елаему осуествлять динамическое вычисление вра-ений. апример, если добавить описание
$ENTRY Upd {e.X = <Mu e.X>;}
то командная строка refgo e+prog1 приведет к требованию написать выражение. Это выражение будет сделано полем памяти программы prog1 и вычислено, а результат выведен. Например, написав для программы 13.1.4 <Alphabet>
мы получим в качестве результата 'abcdefghijklmnopqrstuvwxyz'
Естественно возникает вопрос об обработке внутри языка произвольных, а не только объектных, выражений. Для этого имеются стандартные функции Up и Dn. ервая из них превраает объектное вра ение в выра ение произвольного вида, вторая кодирует сво область зрения (ей, по семантике язка, мо ет бть лиь объектное выра ение) в форме, годяейся для общих выражений и даже метавыражений. В стандартном комплекте Рефала есть даже модуль прогонки, который позволяет подать на вход программе ме-тавыра ение и вычислить его настолько, насколько это возмо но без знания значений переменных.
742
13.
ри реении сло ных задач на Рефале естественно возникла задача представления мультииерархической структуры. Для частного случая двух независимых иерархий, одна из которых считается главной, а вторая начнет работать после исчерпания первой, в Рефале разработано мультискобочное представление вра ений. но поддеривается библиотечными функциями кодирования и декодирования выра ений и программ, переводяих мультис-кобочное выражение в его стандартный код и наоборот. Для частного случая, когда вторичная иерархия — наши обычные скобки, а первичная иерархия — ссылка глубоко внутрь скобочного выра ения, неявно задаая одноуров-неву скобочну структуру, независиму от стандартной, алгоритм кодирования искл чительно прост. Вра ение разбито на две несбалансированнх по скобкам части: левую и правую. В обеих частях непарные скобки заменяем на пары )(. Открывающую скобку высшего уровня представляем как ((, место, куда ведет сслка — как ))(, закрвау скобку всего уровня как )).
Предыдущая << 1 .. 251 252 253 254 255 256 < 257 > 258 259 260 261 262 263 .. 316 >> Следующая
Реклама
Авторские права © 2009 AdsNet. Все права защищены.
Rambler's Top100