Re: Conditions in Refal-5.


Subject: Re: Conditions in Refal-5.
From: Anton Orlov (orlov@mccme.ru)
Date: Sat Feb 07 2004 - 01:50:49 MSK


        Добрый вечер!

On Fri, Feb 06, 2004 at 12:56:59 +0300, Savtchenko Maxim wrote:
> Andrei Klimov <klimov@keldysh.ru> wrote:
>
> > А по существу (если я правильно понял, что Вы имеете в виду),
> > я могу только заметить, что подобная работа по "регуляризации"
> > синтаксиса Рефала была проделана на рубеже 80-х и 90-х
> > при разработке Рефала Плюс, а затем шлифовалась дальше
> > в Рефале-6 (теперь это Refal-J -- Рефал над Явой).
>
> Андрей, вы наверное обратили основное внимание на фразу:
>
> "... в нашем случае последнее БП функционально ничем не отличается от
> остальных, и поэтому его не стоит выделять синтаксически."
>
> Вопрос синтаксиса в моей идее наименее существенен, замеченное вами имело
> целью просто чуть-чуть упростить БНФ и никакой смысловой нагрузки не несло.
> Мне интересно иное - пробовал ли кто-нибудь взглянуть на СЕМАНТИКУ
> предложений немного с другой стороны. Рассмотреть работу предложения не как
> "сопоставляем вход с левой частью и заменяем на правую, если выполняются все
> условия", а как на работу соединённых в последовательную цепочку "базовых
> предложений".

Мне кажется, что семантикой рефал-предложения разумно называть
функцию из множества рефал-выражений + таблиц означенных
переменных в множество рефал-выражений.

Если я правильно понимаю, семантика каждого Вами описанного
предложения определяется как семантика рефал5-предложения,
которое получается из Вашего заменой каждого базового предложения
на [pattern, arg] и формированием последовательности
соответствующих условий (перестроек) [arg : pattern]. Это так?

То есть Вы, по сути, предлагаете другой вариант не семантики, а
синтаксиса предложения, чему и соответствует другая запись в виде
БНФ.

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

Некоторую версию АС можно посмотреть по адресу:
http://skif.pereslavl.ru/skif/index.cgi?module=chap&action=getpage&data=refal\as-syntax.html

Часть АС, соответствующая рефал5-предложению, выглядит
так:

e.Sentence ::= /*Empty*/ | t.Action e.Sentence
t.Action ::= t.Pattern | t.Result | t.Block
t.Block ::= (BLOCK e.Branches)
e.Branches ::= /*Empty*/ | t.Branch e.Branches
t.Branch ::= (BRANCH e.Sentence)

t.Result здесь -- это результатное выражение. У Вас оно названо
expression.

> Признаюсь в том, что я долго пытался придумать
> осмысленный пример предложения, которое в новой семантике проще чем в
> традиционной, но увы, видимо я слишком привык думать по старому :-(. Может
> вы чем поможете.

Это неудивительно, потому что семантика Ваших предложений слишком
просто выражается через семантику обычных рефал5-предложений.

С другой стороны, приведённая выше часть АС позволяет записывать
предложения, которые выразить на Рефале-5 уже не так просто.

Например (в синтаксисе Рефала Плюс):

F e1 =
    e1 : {
        (s2) = s2;
        s2 = s2;
    } : {
        1 = "Refal is cool!";
        2 = "Refal is very cool!";
    };

Чтобы записать это на Рефале-5, придётся использовать либо
вспомогательную функцию, либо две копии последнего блока.

                                            Антон.



This archive was generated by hypermail 2b25 : Mon Oct 25 2004 - 21:24:59 MSD