Re: Как закодировать?
- From
- Pavel P ()
- To
- Andrew Ezhguroff
- Date
- 2002-10-09T08:14:07Z
- Area
- RU.ALGORITHMS
From: "Pavel P" <vprin@indiainfo.com>
"Andrew Ezhguroff" <eandr@com2com.ru> wrote in message
news:anvbv0$kva$1@host.talk.ru...
[....]
> PP> toBin 0 = "0"
> PP> toBin x = f x
> PP> where
> PP> f 0 = ""
> PP> f x = f (x >> 1 bitand INT_MAX) +++ toString (x bitand 1)
>
> Что за язык? Довольно забавный синтаксис... Но на стандартном C++ твой
Haskell/Clean family
> алгоритм можно уложить в 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";}
Мериться п...... не будем ? Да ? :))
toBin x = if (x == 0) "0" (f x)
where
f x = if (x == 0) "" (f (x >> 1 bitand INT_MAX) +++ toString (x bitand
1))
И как говорится STL-ные извращения меня не интересуют. :) Это раз
Количество символов ты уже сравнил? И это при том что оба моих варианта
аккуратно разделены пробелами для лучшей читаемости. Ну давай
признайся что С вариант гораздо хуже :) Скобок то сколько!!!
> PP> Сам догадаешься почему приведеный пример на порядок лучше чем твой С
?
>
> И на порядок медленнее (язык больше похож на интерпретируемый)? :-)
Не получишь ты супер приз :) Не медленее. Он компилируемый :)
Тем более когда ты ввел STL, я думаю что С++ будет даже тормознее.
> Но вот преимуществ я не вижу: дополнительная функция, лишняя рекурсия
Дополнительная функция только у тебя c STL. У меня f не экпортится
в глобальную область видимости и ты не можешь ее вызвать ни откуда
кроме как из toBin, а у тебя действительно лишняя глобальная
функция и побороть ты это в C++ не можешь. Если же убрать where
то я получу те же 2 строки что и на С (правда с меньшим кол-вом
символов), но f будет глобальной функцией, что ни есть правильно.
> (проверка выполняется после рекурсивного вызова), серьезные накладные
Меньше чем в STL :) На порядок, ибо это не класс, а просто массив :)
> расходы на работу со строками... И уж тем более никаких преимуществ перед
Дык первое письмо по треду призывало преобразовать, а не распечатать
> итерационным вариантом.
Это ты не сможешь доказать :) Сначала напиши итерационный вариант
преобразования, а не печати строки :)
> К тому же вариант, который ты предложил, не соответствует задаче: надо
было
> не вернуть, а распечатать строку. :-)
Так этим он и лучше :)
Итак поведя итоги:
С пока не смог отстоят позицию краткого и понятного языка :)
пригодного для _прозрачного описания алгоритмов_ :)
B.R.
Pavel
--- ifmail v.2.15dev5
* Origin: Demos online service (2:5020/400)