Как стать автором
Обновить

Комментарии 16

Функциональный примитив. Зачем это здесь?
А что бы вы хотели видеть в моём личном блоге?
Вы предлагайте, не стесняйтесь учить меня жить (:
Да уж. Как можно с простейшей конструкции сделать не читаемую... Интересно, сколько людей взглянув на эту штуку "(if (> b 0) + -) a b)" навскидку скажут, что она делает. Или просто, мне становится плохо, когда открывающихся скобок меньше, чем закрывающихся.
Ну я, например, сразу понял :)
А скобок там хватает вполне.
"(" - 2 штуки
")" - 3 штуки
может это и правильно на этом замечательном языке, но выглядит страшно
Вам в голову не приходило весь исходник посмотреть?
Там ещё определение функции есть.
Ой, да и правда: скобок одинаково, только на разных строчках. Я понял, почему эта штука мне совсем не понравилась: это же клон макросов на С. Там, они общепризнанны показателем плохого стиля. И там это не функции, это директивы компилятора.
Да и вправду это похоже на обратную польскую запись. Только вот снова тот вопрос: зачем такое писать. Я опросил 20 магистров факультета кибернетики: за десять секунд только 1 (!) ответил, что эта штука делает. За минуту ответили все кроме двух. Мой вывод: штука энта нечитаемая.
Ключевое слово «там». Конечно интересно спорить о вкусе креветок с теми, кто их ел.
Зачем создавать объекты? Вот вам вопрос примерно того же плана, что и Ваш «зачем такое писать?».
Между прочим, очень удобно, если привыкнуть. Это польская запись. Отличное изобретение находит достойное применение во многих продуктах, написанных на языках LISP-семейства.
А что именно Вас так в данном примере восхитило?
Вы где-нибудь ещё, кроме функциональных языков такое видели? (-:
Где-то, правда, был рабочий аналог на java. Но смотрится он...
double aplusabsb(double a,double b)
{
return b ? a-b : a+b;
}

cout << aplusabsb(1,-1);

Ух ты, тоже суммирует a и |b| ;-)
И главное — не надо объяснять как работает.
Если смотреть с чисто практической точки зрения, решение не хуже и не лучше других.

float aPlusAbsB(float a, float b)
{
if(b > 0)
return a + b;
else
return a - b;
}

Тоже работает и даже понятнее чем Ваш пример.
Есть одно но, в scheme логичнее сделать так, а не иначе. И мне это решение нисколько не менее понятно чем аналогичное в C++.
Оно по-своему красиво, и заморочено. Почему Вы считаете, что Ваш код лучше?
Пусть расцветают тысячи цветов (:
Я не считаю лучшим "свой" код, просто мне кажется это все слишком простым. А уж на счет scheme точно спорить не буду — я в нем не разбираюсь. Может я по незнанию не в состоянии разглядеть красоту в столь простых функциях ;)
b ? a-b : a+b
(b > 0) ? (a + b) : (a - b)

потому что -n == true (если n != 0)
Правда, торможу.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории