На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
Страницы: (5) 1 2 [3] 4 5  все  ( Перейти к последнему сообщению )  
> Lisp vs C++ , померяемся?
    Цитата linuxfan @
    Кстати, лямбды в питоне, кажется есть и вроде даже адекватные.

    В глубь языка Python
    Цитата
    Python поддерживает интересный синтаксис, позволяющий определять небольшие однострочные функции на лету. Позаимствованные из Lisp, так назыаемые lambda-функции могут быть использованы везде, где требуется функция.
      Пардон, вспомнил, что адекватные, но ограниченные.
        Как там было у классика?.. "Горе от ума"?
        Все эти for_each и т.п. лямбды понятности в код не добавляют.
        Короче, я так и не понял, куда это - ф сад или ф топку.

        ...
        ну, вот например:
        Цитата

        for( int i = 0; i < vec.Size(); i++ ) {
        if( CheckCondition( vec[i] ) ) {
        break;
        }
        }

        Посмотрю я на код через .. ну скаже, 10 лет. И всё будет понятно. Чего не скажешь о прожжоном STL коде.
        Да, если особо не злоупотреблять, то он будет таким же понятным. И почти без накладных расходов.
        именно за это я люблю C++ + STL::контейнеры.
          Цитата BugHunter @
          Посмотрю я на код через .. ну скаже, 10 лет. И всё будет понятно.

          Угумс... Угумс... Только тебе нужно 5 строчек для того, для чего мне потребуется 1, и эта одна будет работать несколько эффективней и быстрее:
          ExpandedWrap disabled
            vector<...>::iterator p = std::find_if(vec.begin(), vec.end(), CheckCondition);
            BugHunter, а твоя мегаконструкция связанные списки обработает? Все так же понятно?
              И еще скажи, что этот код не понятен, и не читабелен. Для того, чтобы понять, что делает твой код, мне нужно просмотреть 3 строчки (for + if + break). В моем случае - одна, в которой явно указывается производимая операция. Почувствуй разницу.
                Цитата
                BugHunter, а твоя мегаконструкция связанные списки обработает? Все так же понятно?


                Связные списки она не обработает. ПОтому что они не поддерживают random access iterator. И фигли? Но этого и не было в начальном условии. Ну хоспади, заменил бы i на std::list<...>::iterator, Size() на .end(), и всё ништяк.

                Цитата
                В моем случае - одна, в которой явно указывается производимая операция.

                Тут главное, не увлечься. Поскольку плоский int я храню в контейнерах нечасто (точнее, часто, но над ними извращений не делается), а какие нибудь классики, то тут начинается беда с биндерами и пр. mem_fun_ref, что ОФИГЕННО добавляет читаемости в коде (злая шутка).

                Добавлено
                Цитата
                Только тебе нужно 5 строчек

                Я и на русском, и на буржуйском бью 250 знаков в минуту, так что фигня война.
                Реализация непосредственно алгоритма занимает процентов 15-20% времени (максимум), затраченного на задачу.
                Сообщение отредактировано: BugHunter -
                  Блин, опять в оффтоп скатились чтоли?
                    Почему оффтоп?
                    Перевожу последние свои посты на русский.
                    Lisp ф топку, и извращённый C++ - туда же. Сосредоточимся на задачах, а не языковых средствах и синтаксических сахарах.
                    Сообщение отредактировано: BugHunter -
                      Цитата BugHunter @
                      Сосредоточимся на задачах, а не языковых средствах и синтаксических сахарах.

                      Lisp как раз и позволяет это сделать, в отличие от... :)
                        ну да, ну да.

                        ExpandedWrap disabled
                          (defun make-logger (filename)
                            (let ((log (open filename
                                                 :direction :output
                                                 :if-does-not-exist :create
                                                 :if-exists :append)))
                              (values
                                (lambda (string)
                                  (format log "~a~%" string))
                                (lambda ()
                                  (close log)))))


                        что здесь хотел афтор - хрен его не разберёт, а я даже и пытаться не буду. Вот, например, код на Java или C# или даже Pascal - мне понятен всегда, несмотря на то, что я никогда их не изучал специально.
                        Сообщение отредактировано: BugHunter -
                          Цитата BugHunter @
                          а какие нибудь классики, то тут начинается беда с биндерами и пр. mem_fun_ref, что ОФИГЕННО добавляет читаемости в коде (злая шутка).

                          Ну так сейчас mem_fun_ref'ами никто практически и не пользуется. Все больше boost::bind'ерами... Но ты ведь boost не пользуешь - тебе нельзя... :)

                          Цитата BugHunter @
                          Я и на русском, и на буржуйском бью 250 знаков в минуту, так что фигня война.
                          Реализация непосредственно алгоритма занимает процентов 15-20% времени (максимум), затраченного на задачу.

                          Дело не в том, как быстро ты (или я) по клаве стучишь, а в том, какими сущностями оперируешь. Я оперирую алгоритмами. Ты (судя по всему) - простыми языковыми конструкциями...
                            Цитата BugHunter @
                            что здесь хотел афтор - хрен его не разберёт, а я даже и пытаться не буду.

                            Я со всего только форматную строку не понял, ибо не ртфмил. Все остальное как на ладошке.
                              ~a == aesthetic (печать аргумента в красивом виде)
                              ~% == \n
                              Все остальное понятно, потому что там, где в C/C++/Pascal применяют хитрые языковые конструкции, в Lisp'е пишут чуть ли не на естественном языке. Фнукциональные языки, как правило, позволяют писать более выразительный и понятный код.

                              Добавлено
                              Цитата BugHunter @
                              Вот, например, код на Java или C# или даже Pascal - мне понятен всегда, несмотря на то, что я никогда их не изучал специально.

                              Так они все похожи как сиамские близнецы. Человеку, далекому от программирования Lisp ИМХО будет выглядеть понятнее.
                              Зацени подсчет чисел Фибоначчи:
                              ExpandedWrap disabled
                                (loop repeat 5
                                      for x = 0 then y
                                      and y = 1 then (+ x y)
                                      collect y)

                              Читается идеально:
                              repeat 5: повторям цикл пять раз;
                              for x=0 then y: изначально x приравниваем к 0, а на каждой последующей итерации присваиваем x значение y
                              and y = 1 then (+ x y): а y изначально приравниваем к 1, а на каждой последующей итерации присваиваем y значение x+y
                              collect y: результатом выполнения цикла будет список из значений y
                              Думаю, плюсовые заморочки были бы менее очевидными.
                                Цитата linuxfan @
                                Человеку, далекому от программирования Lisp ИМХО будет выглядеть понятнее.
                                Человеку, далекому от программирования это будет темный лес.
                                Цитата linuxfan @
                                Читается идеально:
                                Может быть идеально, когда знаешь. А когда нет - берешь словарь и разбираешь:
                                for x = 0 then y   |   для x=0 затем/потом/тогда y
                                Что затем y? Или что потом y? x затем y? Или просто затем y? А зачем(когда) затем? Или когда тогда?
                                and y = 1 then (+ x y)   |   и y=1 затем/потом/тогда (+ x y)
                                Аналогично. А что такое + x y? Это ж еще объяснить надо про инфиксную запись.
                                Оно и dcfsnz x,1 читается идеально, когда знаешь, что это. :)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:
                                Страницы: (5) 1 2 [3] 4 5  все


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0412 ]   [ 15 queries used ]   [ Generated: 27.04.24, 10:09 GMT ]