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)