|
|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Ђ«ҐЄб ¤а „ҐаЄ з 2:5020/400 11 Dec 2001 14:28:47 To : Vladimir Bormotov Subject : Re[4]: goto нет в tcl -------------------------------------------------------------------------------- dn.ua> From: Александр Деркач <arush@avest.org> Hello Vladimir, Tuesday, December 11, 2001, 4:21:54 AM, you wrote: VB> Hi, Andrey! >>>>>> "AK" == Andrey Khavryuchenko <akhavr@kds.com.ua> writes: VB> a>> А если мне надо что-то типа VB> a>> for (i=1;i<a;i++){ VB> a>> ... VB> a>> for (j=1;j<b;j++){ VB> a>> ... VB> a>> for (k=1;k<c;k++){ VB> a>> ... VB> a>> if (f1(i,j,k)) goto l1; VB> a>> if (f2(i,j,k)) goto l2; VB> a>> if (f3(i,j,k)) goto l3; VB> a>> ... VB> a>> } VB> a>> ... VB> a>> l1: VB> a>> ... VB> a>> } VB> a>> ... VB> a>> l2: VB> a>> ... VB> a>> } VB> a>> ... VB> a>> l3: VB> a>> ... VB> a>> Как в таком случае без goto придется извращаться? VB> AK> Без того, что у тебя скрыто в ... и остального из функции это Г VB> AK> переделать нельзя. (1) VB> а я бы еще хотел посмотреть на f1/f2/f3, на возможность развернуть циклы, VB> написать рекурентные формулы и так далее... (2) VB> Hе, люди просто не понимают ;) VB> Кроме того что это оффтопик и нас сейчас погонят, я вот могу сказать, что VB> такие вложеные циклы говорят о том, что данные _представлены_ "некрасиво", VB> и как следсвие "лобовой метод обработки, с тупой оптимизацией". (3) (3)А как интересно более красиво можно представить например трехмерную матрицу? И с какой точки зрения красиво? Если сточки зрения экономии памяти - это одно если сточки зрения максимального быстродействия - это друго, если с точки зрения абстрактных принципов так называемого "структурного программирования" - это может быть третье (но мне не нужное). Hе знаю чем вам не нравиться метод обработки "в лоб", но меня мало волнует какой метод обработки вам больше нравится - через зад, или с поднаподвыподвертом или еще как, поскольку все это слишком субъективно. Кому то удобнее писать x=y*128, а кому то - x=y shl 7. (2)Интересно как можно избавиться от циклов, если в цикле по k мы производим модификацию/запись/чтение данных в каждой итерации? Рекурентные формулы с этим слабо связаны и разворачивание циклов здесь тоже не поможет (к тому же это гораздо лучше делает компилятор). (1) Почему интересно вы считаете что это - "Г"? Потому что используется goto? Тогда это уже религия и ничего общего с эфективностью она не имеет, поскольку ограничивает свободу программиста в выборе необходимых ему средств. К тому же религия бывает разной, кому-то циклы не понравились - избавимся от циклов, заменим их, например, рекурсивными вызовами: for(i=10;i>1;i--){...} меняем на: for_sub(10) for_sub(i){ ... if(i>1) { for_sub(i-1); } If/case не понравились - заменим if/case на вызов функции из таблицы согласно индексу. Hе понравился способ записи выражений - давайте будем пользоваться обратной польской записью, вместо x=(a+b)*c будем писать x=a b + c *. Могут возразить что это неудобочитаемо, но зато никаких скобок, никаких приоритетов операций, облегчение синтаксического разбора в компиляторе и т.д. и т.п. К тому же "неудобно" - это дело привычки, если обратной польской записи учить в начальных классах, то она будет гораздо более понятна и удобна чем обычная. Я не призываю пользоваться goto где нужно и где не нужно, просто бывают случаи когда его использование позволяет добиться гораздо большей эффективности и "красивости" кода. -- Best regards, Александр mailto:arush@avest.org Отправлено через сервер Talk.Ru - http://www.talk.ru --- ifmail v.2.15dev5 * Origin: Talk.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/3647c22f846d.html, оценка из 5, голосов 10
|