742
ГЛАВА 13. СЕНТЕНЦИАЛЬНЫЕ МЕТОДЫ
При решении сложных задач на
Рефале
естественно возникла задача пред-
ставления мультииерархической структуры. Для частного случая двух неза-
висимых иерархий, одна из которых считается главной, а вторая начнет рабо-
тать после исчерпания первой, в
Рефале
разработано мультискобочное пред-
ставление выражений. Оно поддерживается библиотечными функциями ко-
дирования и декодирования выражений и программ, переводящих мультис-
кобочное выражение в его стандартный код и наоборот. Для частного случая,
когда вторичная иерархия — наши обычные скобки, а первичная иерархия —
ссылка глубоко внутрь скобочного выражения, неявно задающая одноуров-
невую скобочную структуру, независимую от стандартной, алгоритм кодиро-
вания исключительно прост.Выражение разбито на две несбалансированных
по скобкам части: левую и правую. В обеих частях непарные скобки заменя-
ем на пары
)(
. Открывающую скобку высшего уровня представляем как
((
,
место, куда ведет ссылка — как
))(
, закрывающую скобку высшего уровня
как
))
.
И в заключение рассмотрим достаточно сложный алгоритм на
Рефале
,
иллюстрирующий многие приемы программирования. Пусть у нас дано вы-
ражение с различными парными скобками (в конкретном случае мы исполь-
зуем пары
’()[]{}<>’
, но программа составлена так, чтобы эти пары можно бы-
ло заменить в любой момент). Для эффективной работы на Рефале это вы-
ражение нужно закодировать, используя структурные скобки. Кодом пары
скобок
Левая Правая
будут скобки
(Левая
и
Правая)
. Ниже дан алгоритм
кодировки.
При записи данного алгоритма используется еще одна возможность
Ре-
фала-5
. После образца через запятую может идти произвольное выражение,
включающее свободные переменные образца, а затем другой образец. Во вто-
ром образце мы отождествляем вспомогательное выражение, не изменяя зна-
чений переменных, унаследованных из предыдущего образца. Если после
второго образца идут фигурные скобки, то мы задаем безымянную функцию
внутри функции. Если же их нет, то это отождествление рассматривается как
дополнительное условие успешности первого отождествления. Эта иерархия
вложенности может продолжаться на несколько уровней, причем перемен-
ные внешних уровней на внутренних уровнях остаются связанными, уже не
изменяя значений.
Иерархически вложенные функции и условия в принципе не нужны для
Рефала
, но их использование позволяет сократить и, главное, лучше струк-
турировать текст программы.
Программа 13.1.2 Мультискобочное выражение: Рефал