Илья Ермаков писал(а):
... в идеологии Оберона между выражениями и действиями есть твёрдая граница (в отличие от Си), которая нигде не нарушается.
Наконец, есть железное правило - вычисление выражения не должно давать побочных эффектов.
Отсюда и правило проецируется на функции...
Я с вами согласен. Но только частично.
Да, в Обероне действительно выражения не предназначены для выполнения последовательности действий.
Но! Ничто не мешает такую последовательность организовать, т.к. выражение вычисляется лениво.
Не нравится, что операторы в одну строку записаны? Ну пишите их вертикально.
Если пораскинуть мозгами, то быстро понимаешь, что проблема заключается в своей собственной подкорке.
И естественно выходит, что ваше "железное правило" мыльный пузырь. (я тут конечно императивный язык имею ввиду)
И ничего уже не проецируется на функции...
Попробуйте доказать обратное! Нет абсолютно никакого смысла запрещать в выражениях побочные эффекты. Забудьте вы вообще про выражения и про само слово "выражение". Назовите для себя это каким нибудь "оператор секьюенс уис гуард" и сразу на душе станет легче.
Проблема то есть, но не там куда вы показываете. Проблема в психологии, привычках и т.д. Проблема в человеческом факторе.
Когда пасквилянт пробует кодить на Си, он начинает грязно материться, что действия в выражениях это маразм. А когда лисповец начинает кодить на Паскале, то матерится, что элементарные вещи приходится делать через задницу.
Я вот сейчас на досуге почитываю SICP - это самая сильная книга по программированию по-моему.
Парадоксально, что все, даже самые изысканные примеры можно переписать на CP. Я даже рисую себе в голове такие программы когда читаю примеры на Схеме. Все можно. И тоже будет красиво гибко и расширяемо.
НО! Цена усилий несоизмерима!
Попробуйте переписать ради интереса пример из книги по работе с дробями. И придать ту же гибкость.
У вас это легко получится. Я не сомневаюсь. А потом попробуйте то-же самое в первый раз закодить на Схеме... Ну и далее "но комментс" как говорится!...