|
ru.algorithms- RU.ALGORITHMS ---------------------------------------------------------------- From : Andrew Ezhguroff 2:5020/400 09 Oct 2002 14:05:23 To : Pavel P Subject : Re: Как закодировать? -------------------------------------------------------------------------------- Привет! "Pavel P" <vprin@indiainfo.com> сообщил(а): >> алгоритм можно уложить в 2 строчки: >> std::string f(int x){return x? f((x>>1)&INT_MAX)+char((x&1)+'0'): "";} >> std::string toBin(int x){return x? f(x): "0";} PP> Мериться п...... не будем ? Да ? :)) PP> toBin x = if (x == 0) "0" (f x) PP> where PP> f x = if (x == 0) "" (f (x >> 1 bitand INT_MAX) +++ toString (x PP> bitand 1)) И тут же сам начинаешь меряться... :-) К тому же это твои слова из прошлого письма: =========Beginning of the citation============== Хотя многие до сих пор думают что на нем самая краткая запись :) Люди не пишите на С :) Пишите вот так :) =========The end of the citation================ А где ты до этого у меня слова о длине программы видел? Hо если так желаешь, то, насколько я помню, на Forth эта программа будет в несколько раз короче твоего варианта. :-) PP> И как говорится STL-ные извращения меня не интересуют. :) STL-это часть стандарта C++ (в отличии от shr в Паскале). PP> Это раз Количество символов ты уже сравнил? И это при том что оба моих PP> варианта аккуратно разделены пробелами для лучшей читаемости. А зачем мне это? Я закодировал твой алгоритм один в один на стандартном C++ и все... >> И на порядок медленнее (язык больше похож на интерпретируемый)? :-) PP> Hе получишь ты супер приз :) Hе медленее. Он компилируемый :) Basic тоже компиляторы имеет (помнится был такой на СМ-1800, :-) да и QB до сих пор используют). Заглянул сейчас на http://haskell.org - он имеет как компиляторы, так и интерпретаторы. И ИМХО, я не думаю, что это чисто компилируемый язык (скорее всего без элементов интерпретации обойтись невозможно). PP> Тем более когда ты ввел STL, я думаю что С++ будет даже тормознее. Вот тебе аналог (правда уже не такой буквальный) твоего алгоритма, но без STL: static char *Tmp; static void f(int val){ if(!val)return; f((val>>1)&INT_MAX); *Tmp++=(val&1)+'0'; } char* toBin(int val){ static char Buf[CHAR_BIT*sizeof(int)+1]; Tmp=Buf; if(!val){ *Tmp++='0'; }else{ f(val); } *Tmp='\0'; return Buf; } >> Hо вот преимуществ я не вижу: дополнительная функция, лишняя рекурсия PP> Дополнительная функция только у тебя c STL. У меня f не экпортится PP> в глобальную область видимости и ты не можешь ее вызвать ни откуда PP> кроме как из toBin, а у тебя действительно лишняя глобальная PP> функция и побороть ты это в C++ не можешь. Если я поставлю "static", то функция перестанет быть глобальной. Hо от этого она не перестанет быть функцией. Так что независимо от области видимости, функций у тебя две. >> (проверка выполняется после рекурсивного вызова), серьезные накладные PP> Меньше чем в STL :) Hа порядок, ибо это не класс, а просто массив :) Судя по всему, динамический массив. Т.е. та же самая работа с кучей и прочие тормоза (включая, вероятно, и автаматическую сборку мусора?). Только в STL это все открыто, а у тебя остается "за кадром". PP> Это ты не сможешь доказать :) Сначала напиши итерационный вариант PP> преобразования, а не печати строки :) Итерационный вариант без STL: char* toBin(int val){ static char Buf[CHAR_BIT*sizeof(int)+1]; char *Tmp = Buf+(sizeof(Buf)-1); do{ *--Tmp = '0'+(val&1); val=(val>>1)&INT_MAX; }while(val); return Tmp; } PP> С пока не смог отстоят позицию краткого и понятного языка :) PP> пригодного для _прозрачного описания алгоритмов_ :) А зачем ему это надо? Си - это очень удобный рабочий инструмент. Если понадобится предельная краткость записи, то я возьму APL, или Forth... Если прозрачность описания алгоритма - что-нибудь Алголо-подобное (в том числе и Паскаль). Hо если мне надо написать реальную программу, то в большинстве случаев это будет C/C++. С уважением, Андрей. -- Отправлено через сервер Форумы@mail.ru - http://talk.mail.ru --- ifmail v.2.15dev5 * Origin: Talk.Mail.Ru (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.algorithms/6488b9b60032.html, оценка из 5, голосов 10
|