Школа179: Oner Xaum/RL1/ОписаниеRL ...

 

Язык RL

Определения


Выражения


Мы начнем с определений и поясняющих их примеров.

Символом (или атомом) мы будем называть любую последовательность,
составленную из букв; при этом под буквами мы понимаем буквы
английского алфавита, причем большие и маленькие буквы считаем
одинаковыми; знак подчеркивания тоже считается буквой.
Примеры:

A, B, symbol, Another Symbol? — символы
Не Символ?, a2, abc-d — не символы

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


Примеры выражений:

A B CCC D — состоит из четырех символов
(A B) — состоит из одного терма,
представляющего собой выражение
из двух символов в скобках

(()) B CCC — выражение из трех термов,

первый из которых есть выражение из единственного
терма в скобках
— пустое выражение

Обратите внимание, что пробелы вокруг скобок ставить не обязательно.


Программы и функции


В языке RL все объекты — программы, входные данные, результаты

работы — являются выражениями.


Программа на языке RL представляет собой выражение, состоящее из
одного или нескольких термов. Эти термы называются функциями.


Каждая функция имеет следующий вид:


(NAME (ARG_1... ARG_n) BODY),


где


NAME — символ, называемый именем функции;
ARG_1... ARG_n — символы, называемые аргументами функции;
BODY — терм, называемый телом функции.


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


Имена функций, описанных в программе, не должны совпадать.


Каждая функция вычисляет некоторое выражение, называемое ее значением
и зависящее от значений аргументов. Результатом работы программы
является значение первой функции программы при значениях ее
аргументов, заданных пользователем при запуске программы.


Значением функции называется значение терма — ее тела. Что такое
значение терма, определяется в следующих разделах.


Параметры. Значение терма при данных значениях параметров


Для каждого терма определяется список символов, называемых

его параметрами, и значение терма при заданных значениях этих
параметров. Значениями термов, как и их параметров, являются выражения, а
также специальный символ НЕОПРЕДЕЛЕНО.


Значения и параметры данного терма определяются через значения и
параметры термов, входящих в этот терм. Ясно, что этот процесс
должен когда-то заканчиваться, так что некоторые термы должны
получать значения непосредственно.


Стандартные термы


Терм (ABORT) не имеет параметров, и его значением является
символ НЕОПРЕДЕЛЕНО.


Пусть имеется выражение X.


Терм (QUOTE X) не имеет параметров, и его значением является выражение X.


Например, значением терма (QUOTE) является пустое выражение, а
значением терма (QUOTE (A) () B) является выражение из трех термов:
(A) () B


Другим примером терма, значение которого определяется непосредственно,
является аргумент функции. Его значение определяется при вызове функции
(об этом подробнее будет рассказано позже), в частности, в начале
работы программы пользователь задает значения всех аргументов первой
(возможно, единственной) функции программы. Значения всех остальных термов
определяются через уже известные значения.


Пусть T_1... T_n — термы, значT_1 ... значT_n — выражения,
являющиеся их значениями.


Параметры всех описываемых далее термов — все параметры термов
T_1... T_n, входящих в их описание.


Значение терма (FIRST T_1 ) — это первый терм выражения значT_1.
Если же выражение значT_1 пусто или не определено, значением этого терма
считается символ НЕОПРЕДЕЛЕНО.


Значением терма (BF T_1) является выражение, полученное отбрасыванием
первого терма выражения значT_1. Если выражение значT_1 пусто или не
определено, то значением этого терма является символ НЕОПРЕДЕЛЕНО.


Аналогично определяются значения термов
(LAST T_1) и (BL T_1). Значением терма (LAST T_1) является значение
последнего терма выражения значT_1; значением терма (BL T_1)
является выражение, полученное отбрасыванием последнего терма выражения
значT_1.


Значением функции называется значение терма — ее тела.


Упражнение 2.1. Чему равно значение терма (BL T_1), если значT_1 состоит
из одного терма?


2.1 Опишите функцию SECOND, значение которой — второй терм
выражения, являющегося значением ее аргумента.


Решение: Второй терм выражения, являющегося значением терма X — это
первый терм выражения (BF X). Значит, мы можем записать:


(SECOND (X)
(FIRST (BF X))
)


Если при этом значение X не определено, то значение (BF X)
тоже не определено, значит, не определено и значение (FIRST (BF X)).
Если же значение X состоит из одного терма, то значение терма (BF X) --
пустое выражение, а значение (FIRST (BF X)) снова не определено.


Опишите функцию, значением которой является выражение, состоящее из

двух термов: первого и последнего терма значения ее аргумента.


Решение:


(FIRSTandLAST (X)
(EXPR
(FIRST X)
(LAST X)
)
)


Замечание. Приведенная функция имеет небольшой «дефект»: если
значение X состоит из одного терма, то значением этой функции
будет выражение, состоящее из дважды повторенного значения X.


Значение терма (EQUAL T_1 T_2) есть символ TRUE, если выражения значT_1 и
значT_2 определены и совпадают, символ FALSE, если эти выражения
определены, но не совпадают, и символ НЕОПРЕДЕЛЕНО, если хотя бы одно
из этих выражений не определено.


Значение терма (SYMBOL T_1) есть символ TRUE, если значение выражения
значT_1 определено и состоит из одного символа, символ FALSE, если оно
определено и состоит из одного терма — выражения в скобках, и символ
НЕОПРЕДЕЛЕНО во всех остальных случаях (То есть не определено или
является выражением, состоящим более чем из одного терма.).


Значение терма (IF T_1 T_2 T_3) есть выражение значT_2, если выражение
значT_1 есть символ TRUE; выражение значT_3, если выражение значT_1 есть
символ FALSE; символ НЕОПРЕДЕЛЕНО во всех остальных случаях.


2.4 Описать функцию, значение которой на выражении A равно B, на
выражении B равно A, а на остальных выражениях не определено.


Решение:


(AB (X)
(IF (EQUAL X (QUOTE A))
(QUOTE B)
(IF (EQUAL X (QUOTE B))
(QUOTE A)
(ABORT)
)
)
)


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


Значение терма (CONT T_1) есть выражение X, если значT_1 есть выражение
X, заключенное в скобки; символ НЕОПРЕДЕЛЕНО во всех остальных случаях.


Теперь мы можем определить значение терма


(CALL NAME PAR_1... PAR_n)


при данных значениях параметров и при данной программе. При
этом терм NAME должен быть символом, функция с именем NAME должна
быть описана в данной программе и число ее аргументов должно быть
равно n — если хотя бы одно из этих требований не выполнено, то
значение терма не определено. Если же эти требования выполнены,
то значение терма (CALL NAME PAR_1... PAR_n) равно значению
функции с именем NAME на аргументах, равных значениям термов
PAR_1... PAR_n.


Другими словами, для вычисления значения терма (CALL NAME
PAR_1... PAR_n) мы должны сначала вычислить значения термов
PAR_1... PAR_n (при данных значениях параметров и данной программе), а
затем вычислить значение терма — тела функции NAME при значениях
ARG_1... ARG_n, равных значениям PAR_1... PAR_n, то есть
вычислить значение этого терма при соответствующих значениях аргументов.


Упражнение 2.3. Попробуйте применить наши правила к такой функции:


(BAD (X)
(CALL BAD X)
)


Решение: По правилам значение этой функции на выражении E
равно значению терма (CALL BAD X), когда значение его параметра
X равно E. Но значение этого терма по определению равно
значению функции BAD на аргументе E — получился порочный круг.


Мы будем считать, что если наши правила определения значений не

позволяют его определить из-за порочного круга (одно значение сводится к
другому, другое — к третьему и т.п.), то значение является неопределенным.



 
Файлов нет.[Показать файлы/форму]