Rambler's Top100
"Knowledge itself is power"
F.Bacon
Поиск | Карта сайта | Помощь | О проекте | ТТХ  
 Базарная площадь
  
О разделе

Основная страница

Группы обсуждений


Тематический каталог обсуждений

Архив

 
 К н и г и
 
Книжная полка
 
 
Библиотека
 
  
  
 


Поиск
 
Поиск по КС
Поиск в статьях
Яndex© + Google©
Поиск книг

 
  
Тематический каталог
Все манускрипты

 
  
Карта VCL
ОШИБКИ
Сообщения системы

 
Форумы
 
Круглый стол
Новые вопросы

 
  
Базарная площадь
Городская площадь

 
   
С Л С

 
Летопись
 
Королевские Хроники
Рыцарский Зал
Глас народа!

 
  
ТТХ
Конкурсы
Королевская клюква

 
Разделы
 
Hello, World!
Лицей

Квинтана

 
  
Сокровищница
Подземелье Магов
Подводные камни
Свитки

 
  
Школа ОБЕРОНА

 
  
Арсенальная башня
Фолианты
Полигон

 
  
Книга Песка
Дальние земли

 
  
АРХИВЫ

 
 

Сейчас на сайте присутствуют:
 
  
 
Во Флориде и в Королевстве сейчас  09:03[Войти] | [Зарегистрироваться]
Обсуждение темы:
Оберон-технология: особенности и перспективы


Тематика обсуждения: Оберон-технология. Особенности, перспективы, практическое применение. 

Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру


Всего в теме 6256 сообщений

Добавить свое сообщение

Отслеживать это обсуждение

Обсуждение из раздела
Школа ОБЕРОНА

<<<... | 5686—5677 | 5676—5667 | 5666—5657 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 59


№ 5676   21-10-2007 05:40 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5674« (Илья Ермаков)
___________________________

return_t  result( str );
// -
do
  result = prs_lexical().parse( result.str, lexers::keyword_t()
  // -
  if ( result.lexeme == LEX_DEF )
    result = prs_def().parse( result.str, params );
while ( result.lexeme == LEX_DEF );


Илья, Вы только что испортили программу...
Не имеет значение, что возвращает prs_def().parse( result.str, params ) в result.lexeme, важно, что она модифицирует result.str, которое используется на новом шаге итерации...


№ 5675   21-10-2007 05:27 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5673« (Стэн)
___________________________

Ответ на »сообщение 5671« (Илья Ермаков)
___________________________
Так что, думаю, что стоит более умеренно отзываться о самоучках...

А чем я обижал самоучек? Сам такой был.
Можно винить только тех, кто так и не дал развиться системе обучения программированию в школах, которую в 80-х начал строить Ершов. А потом попёр замкнутый круг - сами не научились, научить было некому, потом сами пошли учить... Ужас.


№ 5674   21-10-2007 05:24 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5672« (Стэн)
___________________________

Ответ на »сообщение 5671« (Илья Ермаков)
___________________________
Вот такой пример:
return_t  result( str );
// -
do
  result = prs_lexical().parse( result.str, lexers::keyword_t()
  // -
  if ( result.lexeme == LEX_DEF )
    result = prs_def().parse( result.str, params );
  else
    return result;
while ( true );
Это WHILE, но с BREAK (RETURN) внутри. Сможете его переформулировать так, чтобы код стал проще (без доп. логических переменных и еще одного if), но без использования return?

Вообще, этот цикл слишком предосудительным я не считаю - это "бесконечный" цикл с одним выходом из середины. Обероновский LOOP.. EXIT END (который полезен, правда, ну ооочень редко).
Однако я бы написал условие окончания цикла явно в том месте, где ему и положено быть, ибо реальной нужды в выходе из середины здесь нет (выход-то в конце, прямо рядом с точкой проверки условия цикла :-) ):

return_t  result( str );
// -
do
  result = prs_lexical().parse( result.str, lexers::keyword_t()
  // -
  if ( result.lexeme == LEX_DEF )
    result = prs_def().parse( result.str, params );
while ( result.lexeme == LEX_DEF );



№ 5673   21-10-2007 05:24 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5671« (Илья Ермаков)
___________________________
>>> Например, в спорте или музыке - если человек будет учиться сам, то у него будет неправильная техника, которая может и срабатывать, но рано или поздно будет серьёзным тормозом).
А Вы знаете, что наши каратисты очень часто побеждают японцев на чемпионатах, хотя япония считается родиной каратэ (для некоторых стилей)? А знаете почему? Потому, что в японии четкое следование традиции и технике непреложная истина, а наши допускают "творческое отступление от канона", поэтому более эффективны...
А вообще, вся Ваша позиция проистекает из того, что Вы отказываете людям в возможности проведения самоанализа. Да, выбрал человек неправильный метод, наступил на грабли, но если он задает себе вопрос о том, а почему так случилось, то он может исправиться. Так что, думаю, что стоит более умеренно отзываться о самоучках...


№ 5672   21-10-2007 05:15 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5671« (Илья Ермаков)
___________________________
>>> В ветке по ФП уже был спор - я просил привести примеры циклов, для которых переход к WHILE вызовет удлиннение кода (т.е. дополнительные if внутри и доп. логические переменные).
Вот такой пример:

return_t  result( str );
// -
do
  result = prs_lexical().parse( result.str, lexers::keyword_t()
  // -
  if ( result.lexeme == LEX_DEF )
    result = prs_def().parse( result.str, params );
  else
    return result;
while ( true );


Это WHILE, но с BREAK (RETURN) внутри. Сможете его переформулировать так, чтобы код стал проще (без доп. логических переменных и еще одного if), но без использования return?


№ 5671   21-10-2007 04:41 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5670« (Стэн)
___________________________

Ответ на »сообщение 5666« (Илья Ермаков)
___________________________
И стиль у них одинаковый - закатать полный проход FOR, а потом искать место, когда бы с него спрыгнуть через BREAK.
А что, с WHILE не так? Ищется место, куда бы воткнуть дополнительное условие завершения...

Вас не понял :-) А разве у WHILE не только одно место, куда можно воткнуть условие, обратное к условию завершения? :-)
В ветке по ФП уже был спор - я просил привести примеры циклов, для которых переход к WHILE вызовет удлиннение кода (т.е. дополнительные if внутри и доп. логические переменные). То, что народ приводил, было разными вариациями линейного поиска (они даже этого не замечали) - который переписывается простым и очевидным способом в WHILE, и никакой if (который есть внутри foreach) становится не нужен.
Сами подумайте - есть цикл. Конструкция, тело которой выполняется несколько раз. И вдруг большую часть этого тела занимает if с некоторым действием, которое выполнится ТОЛЬКО ОДИН РАЗ - перед break. Чужеродное тело, которое к циклу вообще никакого отношения не имеет - это действие ПОСЛЕ, по завершении линейного поиска. Неужели ничего не настораживает?


В интеллектуальном расизме Вас что-ли обвинить?!.. Может быть раскроете эту тему по подробнее, на каком это основании Вы так пренебрежительно и надменно отзываетесь о весьма широком круге людей?
Либо, чтобы Ваши слова небыли пустым звуком, может приведете результаты соответствующих исследований...

?? Я не говорил о круге людей, более широком, чем тот, о котором я говорил.
А говорил я о наблюдениях среди студентов-самоучек. О том, что FOR-BREAK - это их общая находка. И общая особенность - неумение правильно алгоритмировать. И о том, что эта корреляция лично для меня достаточна для того, чтобы считать FOR-BREAK плохой конструкцией (потому что "интуитивные находки", самый очевидный для новичков путь чаще всего плох. Например, в спорте или музыке - если человек будет учиться сам, то у него будет неправильная техника, которая может и срабатывать, но рано или поздно будет серьёзным тормозом) . И даже подчеркнул, что не говорю о какой-то причинно-следственной связи между использованием FOR-BREAK и неумением писать хорошие программы его использующих из круга профессиональных программистов.


№ 5670   21-10-2007 04:28 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5666« (Илья Ермаков)
___________________________
>>> И стиль у них одинаковый - закатать полный проход FOR, а потом искать место, когда бы с него спрыгнуть через BREAK.
А что, с WHILE не так? Ищется место, куда бы воткнуть дополнительное условие завершения...

>>> У меня есть многочисленные наблюдения, что использование FOR-BREAK - интуитивная находка всех самоучек. И наблюдения, что строить алгоритмы грамотно с первого раза (а не отладкой и подгонкой) они не способны.
>>> Что-то на уровне общего жизненного опыта мне подсказывает, что если какая-то штука очевидна самоучкам и при этом использование этой штуки обычно коррелирует с неумением получать правильный результат (не надо проводить причинно-следственной связи, достаточно зафиксировать факт корреляции), то эта штука является опасной ошибкой.
В интеллектуальном расизме Вас что-ли обвинить?!.. Может быть раскроете эту тему по подробнее, на каком это основании Вы так пренебрежительно и надменно отзываетесь о весьма широком круге людей?
Либо, чтобы Ваши слова небыли пустым звуком, может приведете результаты соответствующих исследований...


№ 5669   21-10-2007 04:14 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5661« (pepper)
___________________________

Ответ на »сообщение 5634« (Илья Ермаков)
___________________________


Илья, ты серьезно предпочел бы "лечь под нож" компьютера, запрограммированного врачом (пусть даже на обероне), чем профессиональным программистом?
Да. С одним важным "но", про которое я с самого начала говорил: для этого врача программирование медицинских систем должно быть не случайным эпизодом, а постоянной работой - "программирующий врач".
Потому что все лучшие программисты, которых я лично знаю - это программисты, которые получили основное образование не по ИТ-специальности. Чаще, конечно, физмат. Но уверен, что в качестве фундамента может быть и другое не гуманитарное образование. Лингвистика, к примеру. При этом приходилось беседовать на программисткие темы с одним старым другом - медиком (была там одна идейка), который вообще никогда не занимался программированием (даже на уроках в школе). Так вот, способность его ухватывать самую суть, которую средний программёр чаще всего не замечает, меня поражала постоянно. Сказывается незамусоренность мозгов всяким хламом (а в нашей отрасли хлама больше, чем в какой другой - одну область веб-технологий взять...).


№ 5668   21-10-2007 04:08 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5659« (pepper)
___________________________

Ответ на »сообщение 5654« (AVC)
___________________________
P.S. Вирт проектирует язык "от компилятора", выставляя для компилятора определенные критерии (простота, прежде всего). Этим все очень хорошо объясняется.

Во первых, Вы утрируете, хотя доля правды есть.
Во-вторых, с простотой следует надёжность и уверенность в компиляторе.
Покажите мне на компилятор С++, в котором нет ошибок и который полностью соответствует стандарту.


№ 5667   21-10-2007 04:06 Ответить на это сообщение Ответить на это сообщение с цитированием
Ответ на »сообщение 5657« (Стэн)
___________________________

Ответ на »сообщение 5655« (AVC)
___________________________
А вот если бы были специализированные циклы, от которых по малопонятным причинам предлагают отказываться, то ошибок могло бы быть меньше, так как компилятор берет на себя часть проверок...

Я ничего не имею против цикла FOR. И даже против FOREACH. Только против BREAK. Но я прекрасно понимаю, что если Вам дали в языке FOREACH, но не дали его версии для итерирования по элементам с явным указанием условия линейного поиска, то рука у Вас сама тянется к BREAK :-) И плюёте Вы на все теоретические аргументы.
В Eiffel вообще в цикле синтаксически выделены отдельные части для условия, изменения и инварианта. Вот вам спец. синт. конструкция, но ГРАМОТНАЯ.
Посему вывод - либо как в Eiffel, конструкции с явно оформленными частями, либо как в Обероне - вообще без спец. вариаций (и для компактного языка общего назначения с упором на системное программирование это оптимальный выбор).
Построители же языков типа Шарпа могли бы последовать первому варианту, вслед за Eiffel - но увы, я больше чем уверен, что для них слово "инвариант" пустой звук, и язык они делали в первую очередь для таких же... А посему дальше FOREACH-BREAK у них фантазия не пошла. Ах, нет, иногда идёт - есть ещё Пёрл, с его секциями завершения циклов, на которые управление передаётся после break, или как-то там ещё... Це вообще вопиющий, показательный пример.


<<<... | 5686—5677 | 5676—5667 | 5666—5657 | ...>>>
Всего сообщений в теме: 6256; страниц: 626; текущая страница: 59


Добавить свое сообщение

Отслеживать это обсуждение

Дополнительная навигация:
Количество сообщений на странице

Порядок сортировки сообщений
Новое сообщение вверху списка (сетевая хронология)
Первое сообщение вверху списка (обычная хронология)

Перейти на конкретную страницу по номеру
  
Время на сайте: GMT минус 5 часов

Если вы заметили орфографическую ошибку на этой странице, просто выделите ошибку мышью и нажмите Ctrl+Enter.
Функция может не работать в некоторых версиях броузеров.

Web hosting for this web site provided by DotNetPark (ASP.NET, SharePoint, MS SQL hosting)  
Software for IIS, Hyper-V, MS SQL. Tools for Windows server administrators. Server migration utilities  

 
© При использовании любых материалов «Королевства Delphi» необходимо указывать источник информации. Перепечатка авторских статей возможна только при согласии всех авторов и администрации сайта.
Все используемые на сайте торговые марки являются собственностью их производителей.

Яндекс цитирования