Re: Об отсечениях внутри блока


Subject: Re: Об отсечениях внутри блока
From: Sergei Romanenko (roman@integrum.ru)
Date: Fri Nov 24 2000 - 22:11:54 MSK


----- Original Message -----
From: "Anton Yu. Orlov" <orlov@mccme.ru>
To: "Sergei Romanenko" <roman@integrum.ru>
Cc: <refal-plus@botik.ru>
Sent: Friday, November 24, 2000 9:27 AM
Subject: Об отсечениях внутри блока.

> У меня к Вам следующий вопрос по Рефалу+. Если попытаться
> скомпилировать такую программу:
> Main = \? \{ \!; },;
> то компилятор выдаст ошибку: ERROR: '\!' without corresponding '\?'.
> Дело здесь в последней запятой. Если ее убрать, то все будет хорошо. В
> книжке по P+ я не нашел соответствующих ограничений на такое
> использование отсечений. Это ошибка в компиляторе?

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

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

При этом наблюдается интересная закономерность: если язык прост и понятен с
точки зрения здравого смысла, то его формальная спецификация, как правило,
оказывается вычурной и утонченной. И наоборот, изящные спецификации обычно
генерируют нечто контро-интуитивное...

(Кстати, ведь процесс обучения математике, в основном и состоит в том, чтобы
поставить обучаемого на уши: чтоб он ходил не ногами, а на руках. Чтобы
тривиальное ему показалось сложным, и заумное - простым и естественным.
"Точка - это то, что не имеет частей, линия - это длина без ширины", и т.п.)

Если же вернуться к вышеприведенной программе, то ей соответствует следующее
правило вывода из (Глава 2, раздел 13.5):

0 |- S
k |- R
--------
k |- S R

Т.е. "\{ \!; }" - это "источник" S, а "," - это "хвост" R. Из правила вывода
следует, что, с точки зрения отсечений, S рассматривается как находящийся на
уровне 0, а R - на уровне k. Поэтому компилятор пожаловался правильно.

(Впрочем, если я сам запутался в спецификации, то не возражаю, если меня
поправят...)

Сергей



This archive was generated by hypermail 2b25 : Fri Nov 24 2000 - 22:16:08 MSK