Re: Conditions in Refal-5.


Subject: Re: Conditions in Refal-5.
From: Arkady Klimov (arklimov@keldysh.ru)
Date: Sat Feb 07 2004 - 23:28:17 MSK


Максим, добрый день,

Антон уже ответил достаточно полно, я хочу от себя немного добавить.
Для рефала-6 когда-то (более 10 лет назад) мной было составлено краткое
формальное описание синтаксиса и семантики(!), в котором проводилась
идея, что вообще не нужно связывать "образец" и "результат" ни в форме
[result:pattern], ни в форме [pattern,result], а считать и то и другое частными
случаями понятия "действие", "action", последовательность которых и
образует "предложение". (В АС, судя по письму Антона, аналогично).
При этом за образцом может опять следовать новый образец, так же как за
результатом - новый результат, например

F { s1 e2 : e3 s4 = <Print e2> = <Print e3> };

F получает строку и печатает ее без первого, а потом без последнего символа
Кстати, этот пример использует, что образец как бы "сохраняет аргумент".

В аттаче - файл с текстом этого описания, который входит в состав поставки
рефала-6. К сожалению, он лежит там в глубоком месте и наверно, редко кто
на него натыкается.

Семантика там очень формально излагается (да еще на Бог весть каком
английском) и понять ее наверно может только тот, кто содержательно
ее уже хорошо знает. Метод описания практически тот же, что использовал
Романенко в известной книге по Рефалу Плюс, но содержательно семантика
отличается тем, что у Романенко она давалась для составной конструкции
вида result:pattern, а у меня этого объединения нет.

Кроме того, обратите внимание что и у Романенко и у меня семантика
разбивается на систему взаимосвязанных семантик, например, есть семантика
образца (как операция отождествления с объектным выражением), есть
семантика блока, есть семантика хвоста или пути.
У действия есть как бы две семантики: одна определяет результатное выражение,
передаваемое хвосту, другая - набор присваиваний переменным, точнее,
расширение исходного набора, тоже передаваемое дальше хвосту.
Поскольку в рефале нет действий, которые и результат выдают новый и среду
меняют, то в формализме нет нужды вводить объединенную семантику
чего-то вроде Вашего БП.
Кроме того, семантика отдельного действия, а у Романенко - "перестройки",
дается лишь контексте хвоста (пути). Только для него можно
сказать, чтО есть его результат.
Сказать отдельно, чтО есть совокупный результат действия
образца или перестройки довольно сложно и громоздко: в этот результат,
помимо значения (объектного выражения), надо еще включать и набор
связываний для уже определенных переменных, чтобы их использовать
в дальнейшем вычислении (которых, как и Вас должно быть множество).
А Вы в своем определении это упустили:

> На выходе 0 - результат подстановки в A переменных связанных во входном поле
> зрения, а так же связанных в результате сопоставления P с входным полем
> зрения.

Хотя, у Вас используется понятие "переменных связанных во входном
поле зрения", но само оно остается неопределенным.

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

----- Original Message -----
From: "Anton Orlov" <orlov@mccme.ru>
To: <refal@botik.ru>
Sent: Saturday, February 07, 2004 1:50 AM
Subject: Re: Conditions in Refal-5.

| Добрый вечер!
|
| 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