Оберон-клуб «ВЄДАsoft»

Твердыня модульных языков
Текущее время: 11 дек 2018, 13:37

Часовой пояс: UTC + 2 часа




Начать новую тему Ответить на тему  [ Сообщений: 13 ]  На страницу Пред.  1, 2
Автор Сообщение
СообщениеДобавлено: 19 фев 2018, 20:41 
Не в сети

Сообщения: 193
akron1 писал(а):
За прошедшее время, накопилось много мелких изменений: сделано удаление неиспользуемых процедур, добавлены некоторые расширения языка, исправлены ошибки, усовершенствована библиотека для KolibriOS.

akron1, у тебя процедуры работы с множествами INCL и EXCL требуют вторым параметром константу? Но ведь в 16 страницах не сказано, что там может быть лишь константа, там сказано -- аргумент x имеет тип INTEGER:
Цитата:
INCL(v, x) v: SET; x: INTEGER v := v + {x}
EXCL(v, x) v: SET; x: INTEGER v := v - {x}

так же как тут, например:
Цитата:
FLT(x) INTEGER REAL identity

А вот, например, указано именно ConstExpression:
Цитата:
ForStatement =
FOR ident ":=" expression TO expression [BY ConstExpression] DO
StatementSequence END .


ЗЫ. Кстати, в чём смысл ограничивать шаг цикла FOR константой???


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 19 фев 2018, 22:32 
Не в сети

Сообщения: 12
В репорте от 22.09.2011 написано:
Цитата:
Procedures INC and DEC may have an explicit increment or decrement. It must be a constant. Also
for INCL and EXCL, x must be a constant.


В более поздних редакциях, Вирт отказался от этого ограничения.

FOR вообще не очень нужен. Если требуется переменный шаг -- надо использовать WHILE. Для случая постоянного шага, FOR теоретически может помочь простому компилятору сгенерить более эффективный код, чем для цикла WHILE, потому что FOR более формализован: инкремент указан в самом операторе цикла, а не прописывается в отдельном операторе присваивания.

Кстати, я что-то не помню случая, когда мне потребовался бы переменный шаг.

Еще вот семантика цикла FOR в разных репортах различается:
2011:
Цитата:
The for statement
FOR v := beg TO end BY inc DO S END
is, if inc > 0, equivalent to

v := beg; lim := end;
WHILE v <= lim DO S; v := v + inc END

and if inc < 0 it is equivalent to

v := beg; lim := end;
WHILE v >= lim DO S; v := v + inc END

2016:
Цитата:
The for statement
FOR v := beg TO end BY inc DO S END
is, if inc > 0, equivalent to

v := beg;
WHILE v <= end DO S; v := v + inc END

and if inc < 0 it is equivalent to

v := beg;
WHILE v >= end DO S; v := v + inc END


Во втором случае end вычисляется в каждой итерации... и мне это не нравится.


Вернуться к началу
 Профиль  
Ответить с цитатой  
СообщениеДобавлено: 20 фев 2018, 08:38 
Не в сети

Сообщения: 19
geniepro писал(а):
ЗЫ. Кстати, в чём смысл ограничивать шаг цикла FOR константой???

По крайней мере знак шага надо знать при компиляции. Иначе получится страшный код.


Вернуться к началу
 Профиль  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 13 ]  На страницу Пред.  1, 2

Часовой пояс: UTC + 2 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
Создано на основе phpBB® Forum Software © phpBB Group
Тех.поддержка phpBB