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

5.4. Значение программ.

Отношения и функции жизненно необходимы для описания для описания значения программ. Используя эти понятия, разрабатывается нотация для описания значения программ. Для простых программ значение будет очевидным, но эти простые примеры послужат освоению теории в целом.

Новые идеи: box-нотация, программа и значение программы.

Множество пар ввод-вывод для всех возможных нормальных запусков программы называется значением программы. Также может быть использованы понятия функция программы и отношение программы. Важно различать значение программы и элементы значения. Для конкретного входа Паскаль-машина, управляемая Паскаль-программой может произвести конкретный выход. Но значение программы это гораздо больше, чем способ выражения результата одного частного выполнения. Оно выражает все возможные выполнения Паскаль-программы на Паскаль-машине.

Программа может принимать вход разбиты на строки и производить выход разбитый на строки . Таким образом пары в значении программы могут быть парами списков состоящих из строк символов.

5.4.1. Box-нотация.

Любая Паскаль-программа – строка символов, передаваемая для обработки Паскаль-машине. Например:

P = †PROGRAM PrintHello (INPUT, OUTPUT); BEGIN WRITELN(‘HELLO’) END.†

Представляет одну из первых программ, рассмотренных в начале части I, в виде строки.

Также эту строку можно записать, опустив маркеры строки, как

P = PROGRAM PrintHello (INPUT, OUTPUT);

BEGIN

WRITELN(‘HELLO’)

END.

Строка P представляет синтаксис программы, а ее значение мы будем записывать как P. Значение P это множество 2-списков (упорядоченных пар) списков символьных строк, в которых аргументы представляют входные данные программы, а значения представляют выходные данные программы, то есть

P = {<L, M>: для входного списка строк L, P выполняется корректно

и возвращает список строк M}

Box-нотация для значения программы держит синтаксис и семантику программы, но ясно разграничивает одно от другого. Для программы PrintHello, приведенной выше:

P = {<L, M: L – любой список строк, а M – 1-список <†HELLO†> } =

{<L, <†HELLO†>>: L – любой список строк }

Помещая текст программы в box:

P = PROGRAM PrintHello (INPUT, OUTPUT); BEGIN WRITELN(‘HELLO’) END

Поскольку P - функция,

PROGRAM PrintHello (INPUT, OUTPUT); BEGIN WRITELN(‘HELLO’) END (L) = <†HELLO†>

для любого списка строк L.

Box-нотация скрывает способ которым программа управляет Паскаль-машиной и показывает только то что сопутствует выполнению. Термин «черный ящик» часто используется для описания механизма рассматриваемого только извне в терминах входов и выходов. Таким образом эта нотация подходит для значения программы с точки зрения ввода-вывода. Например, программа R

PROGRAM PrintHelloInSteps (INPUT, OUTPUT);

BEGIN

WRITE(‘HE’);

WRITE (‘L’);

WRITELN(‘LO’)

END.

Имеет то же значение что и P, то есть R = P.

Программ R также имеет CFPascal имя PrintHelloInSteps. Но поскольку строка †PrintHelloInSteps† является частью строки R, лучше не использовать PrintHelloInSteps в качетсве названия программы R в box-нотации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]