1. PHP / Говнокод #13938

    +123

    1. 1
    list($ignore, $ignore, $ignore, $ignore,$ignore, $ignore, $radius, $ignore) = get_location_data($request['location']);

    Запостил: someone, 14 Октября 2013

    Комментарии (127) RSS

    • слава богу что не так
      <?

      $filter = array(
      'ignore', 'ignore', 'ignore', 'ignore','ignore', 'ignore', 'radius', 'ignore'
      );


      for($i = 0 ; $i < count($filter); $i++){

      $result = get_location_data($request['location']);

      if ($filter[$i] === 'radius'){
      $radius = $result[$i];
      }
      }
      Ответить
    • Ну я так иногда в питоне делаю, когда надо несколько элементов вытащить. А вот в перле вроде как можно было несколько индексов указать.
      Ответить
      • Но, я надеюсь, ты не называешь эту переменную my_ignored_variable?
        Ответить
        • Можно назвать _, правда, будет конфликт с gnu приблудой для локализации.
          Ответить
      • в перле можно так:
        my ($radius) = (get_location_data($whatever))[6];

        (чем народ постоянно пользуется для stat()а который тоже возвращает лист.)

        было бы странно если бы в питоне подобного было нельзя.
        Ответить
        • В Питоне можно так еще:
          radius, _, length, _, _ = get_some_data()

          А в PHP до 5.4 парсер не мог осилить два типа скобок в одном выражении: http://www.phpsadness.com/sad/21
          Ответить
        • В питоне можно, но анонимб же говорит "несколько".

          К слову, в PHP до какой-то версии нельзя было "брать индекс" у произвольного выражения. Только у переменных.
          Ответить
          • > В питоне можно, но анонимб же говорит "несколько".
            а. да. тогда почти книжный пример:
            my ($atime,$mtime,$ctime) = (stat($filename))[8,9,10];
            my ($atime,$mtime,$ctime) = (stat($filename))[8..10]; # alt syntax with range
            Ответить
            • Тупл из 10 элементов больше двух-трех элементов это, имхо, ненормально... Уж лучше бы они хеш вернули, ключи всяко легче запоминать, чем эти циферки.
              Ответить
              • да, stat() в перле попахивает. с одной стороны.

                с другой стороны, в общем случае сам стат нужен бывает редко (что честно говоря и напрягает в те редкие моменты), потому существуют `-X` операторы.

                пример который я привел именно и есть случай который на `-X` операторах сделать нельзя. лучше пример был бы проверка rwx флагов:
                my ($can_read, $can_write, $can_exec) = (-r $filename, -w _, -x _);


                ЗЫ но stat() все равно пахнет, потому что mtime/atime/ctime доступны только с точностью до секунд.
                Ответить
                • > ЗЫ но stat() все равно пахнет, потому что mtime/atime/ctime доступны только с точностью до секунд.
                  А на деле вроде как операционки могут огрублять их хоть до суток, в зависимости от ФС... Плюс на линухе atime'а у меня вообще отключены, чтобы диск не дрочить.
                  Ответить
                  • "А на деле вроде как операционки могут огрублять их хоть до суток, в зависимости от ФС..."

                    большинство новых ФС умеют. Granularity: FAT - 10ms, NTFS - 100ns, zfs, xfs, btrfs, ext4 - 1ns.

                    "Плюс на линухе atime'а у меня вообще отключены, чтобы диск не дрочить."

                    врешь. на линухе по умолчанию включен relatime - atime обновляется когда mtime меняется.

                    atime редко бывает нужен. но пару раз помогало - доказать/показать глупым юзверям какой конфиг файл на самом деле читается.
                    Ответить
                    • > на линухе по умолчанию включен relatime - atime обновляется когда mtime меняется.
                      А еще там (походу даже при включенном noatime?): In addition, since Linux 2.6.30, the file's last access time is always updated if it is more than 1 day old.
                      Ответить
                      • "А еще там (походу даже при включенном noatime?): In addition, since Linux 2.6.30, the file's last access time is always updated if it is more than 1 day old."

                        "noatime" в общем случае пользоватся нельзя. правильная опция - "relatime" (relative access time).

                        фишка что если приложения которые проверяют atime (например бэкапы) то могут и возникают проблемы на уровне логики. например файл был модифицирован вчера, а atime - год назад. back to the future какой-то получается.

                        relatime это почти тоже самое что и noatime, но при модификации файла также обновляется и atime.
                        Ответить
                        • > например файл был модифицирован вчера, а atime - год назад
                          Может я что-то не так понимаю?

                          read-only операции меняют только atime (причем, при включенном relatime, только если oldatime <= ctime || oldatime <= mtime, т.е. максимум 1 раз после каждого изменения файла).
                          write-only операции меняют ctime + mtime.
                          read-write операции меняют все три таймштампа.
                          chmod, mv и прочие операции не трогающие контент меняют только ctime.

                          Сейчас проверял свое понимание на strictatime, relatime, noatime - вроде сходится. И тогда я не понимаю, чем noatime может повредить бекапилкам. Ну не узнают они, что я файл читал с момента последней модификации, и что с того?
                          Ответить
                          • "Ну не узнают они, что я файл читал с момента последней модификации. И что с того?"

                            уже не помню, честно говоря. если интересно, можешь поковырять LKML - Linux была первой кто ввела relatime (потому что нишевые пользователи все еще могут влиять на разработку).

                            PS плоды гугления ничего конкретного не говорят (помимо "совместимость с POSIX"):

                            http://docs.fedoraproject.org/en-US/Fedora/18/html/Power_Management_Guide/Relatime.html

                            и самый прикол что оказывается relatime вроде как уже включена по умолчанию:

                            http://unix.stackexchange.com/questions/17844/when-was-relatime-made-the-default

                            хотя на LWN больше написано:

                            http://lwn.net/Articles/244829/

                            и tmpwatch (про которую я слышу в первый раз) вроде есть основной пользователь atime.
                            Ответить
                            • Да вот в том и дело, что все ссылки в гугле говорят о "совместимости с POSIX", "почтовых клиентах без БД, например mutt" и "тулзах типа tmpreaper которые выносят мусор из темпа". Я ничего из этого не юзаю, поэтому не вижу смысла в atime на моих разделах (часть из которых почти всю свою жизнь висит в read-only)...

                              > и самый прикол что оказывается relatime вроде как уже включена по умолчанию
                              Ну это очень разумное решение, по сравнению с дискодрочильным strictatime. А после того как Линус предложил патч на "last access time is always updated if it is more than 1 day old" эти метки даже можно юзать.
                              Ответить
            • Да, вот такого в питоне не хватает. Причем сделать можно было бы, не переделывая синтаксис.
              Ответить
              • Ну срез и так можно сделать: (stat($filename))[8:10]
                А вот с запятыми все сложнее - такой синтаксис уже используется:
                d = {(1, 2): 'Hello', (3,4): 'World'}
                d[1, 2]
                Ответить
              • И сейчас можно. Don't try this at home.
                mode, size, atime, mtime = map(functools.partial(operator.getitem, os.stat(".")), [0, 6, 7, 8])
                # в новых питонах можно красивее
                mode, size, atime, mtime = map(functools.partial(getattr, os.stat(".")), ["st_mode", "st_size", "st_atime", "st_mtime"])
                Ответить
    • nth-value и безо всякой запаковки / распаковки в списки / массивы.
      (format t "~&3 = ~d" (nth-value 3 (values 0 1 2 3)))
      Ответить
      • Хачкель?
        Ответить
        • Да тут без вариантов. Все хачи с овощной базы Бюрюлева на хачкеле пишут. И борщ всегда можно сварить из капусты и прочей зелени.
          Ответить
        • Лишп.
          Ответить
        • Каскель не умеет возвращать больше одного значения. Это не совместимо с ТК.
          Ответить
          • (a, b)
            можно даже
            Either a b
            Ответить
            • Ну и это кортеж / монада, а не несколько значений.
              Ответить
              • Чем возвращение кортежа принципиально отличается от возврата нескольких значений?
                P.S. Either не совсем монада.
                Ответить
                • Тем что это позволит применить методы кортежа к возвращаемому значению?
                  ОК, не монада, структура такая. Не посмотрел в справку. Но все равно это не множественные значения. Уже хотя бы потому, что все эти объекты имеют какой-то тип, которым можно манипулировать через наследование (т.е. подменить настоящее содержание чем-то другим).
                  Ответить
                  • > это позволит применить методы кортежа к возвращаемому значению
                    Это плохо? Если число возвращаемых аргументов неизвестно (sic!), можно возвращать список.

                    > тип, которым можно манипулировать через наследование

                    К счастью, Хаскель не поддерживает наследование.
                    Ответить
                    • В контексте поставленной задачи это плохо, т.как делает лишние телодвижения о которых никто не просил.
                      Каскель не поддерживает наследование? Та ну? А как же deriving?
                      Ответить
                      • > deriving
                        deriving не имеет никакого отнешения к наследованию. Это указание компилятору вывести инстансы тайпклассов для определяемого типа. Это можно сделать и руками, но зачем писать самоочевидный код, если это может сделать компилятор.

                        Тайпклассы тоже никоим образом не связаны с наследованием. Они определяет протоколы, которым могут удовлетворять типы, нечто вроде интерфейсов. Тип не может наследоваться от тайпкласса или другого типа. Можно только определять "инстансы" - описания, как тип X удовлетворяет протоколу A.
                        Ответить
                        • Бла-бла-бла. Много красивых слов, а результат точно такой же. тайпкласс + deriving выступает, ну, может скорее как интерфейс. т.е. с точки зрения программиста, это контракт, залог того, что функция с известным ему именем применима к чему-то и дает какой-то определенный тип результатов, будучи примененной. Другие аспекты наследования в этом контексте не интересны.
                          Ответить
                          • deriving работает только с несколькими встроенными в язык классами типов, его вообще можно исключить из языка, это никак не повлият на его возможности.

                            Типы ничего не знают о протоколах, реализация протокола никак не может повлиять на сам тип. Нельзя унаследоваться и переопределить поведение в наследнике.

                            Это принципиально отличается от того, что используется в ООП-языках: там тип знает, от каких интерфейсов он "унаследован". В хаскеле ничего подобного нет. Можно взять тип X программиста Васи, протокол Y программиста Пети, и установить соответствие между ними, не меняя изменяя исходного кода Васи и Пети.

                            > функция с известным ему именем применима к чему-то и дает какой-то определенный тип результатов, будучи примененной

                            К наследованию это никак не относится. Это называется полиморфизм.
                            Ответить
                            • Нет, не правда, программист же знает откуда взялась функция. Она не случайно оказалась такой же, она унаследована от другого, более простого типа.
                              Ответить
                              • c++:
                                bool equal(int, int);
                                bool equal(double, double);
                                bool equal(MyT const &, MyT const &);
                                От какого типа унаследована полиморфная equal?
                                Ответить
                                • От мета-типа "равенство", который определяет, что если х = у, то у = х, и если х = у и у = z то х = z, и т.д.
                                  Ответить
                                  • Понекропощу.
                                    Интерфейс I — тип. Класс A, реализующий интерфейс I — тоже тип. Переменная типа A всегда будет иметь ещё и тип I. Класс B, наследующий класс C — тоже тип. Переменная типа C будет иметь также типы B и I. В таком случае ещё говорят, что A будет подтипом I, а B — подтипом A.
                                    Класс типов в хацкеле — НЕ тип. Поэтому реализация типом некоторого класса — НЕ насладование. instance Show MyType не делает тип MyType наследником типа Show, потому что Show — не тип. А deriving вообще что-то вроде макроса.
                                    Мета-типов в языке никаких нет, это чьи-то фантазии. Функции в C++ не наследуются; перегрузка — это вообще другой вид полиморфизма (ad-hoc, а в наследовании — подтиповый). «Равенство» в C++ ничего не определяет и никаких гарантий не даёт, это не агда какая-нибудь.
                                    Ответить
                                    • Долго думал? Аватарка фурри фокс тебе не идет. Нужно было слоупка ставить.
                                      Ответить
    • octave> function [a, b, c] = returnMultipleValues ()
        a = 1;
        b = 2;
        c = 3;
      endfunction
      
      > octave> octave> 
      octave> nthargout(2, @returnMultipleValues)
      ans =  2
      octave>
      Ответить
      • Нужен специальный тип LocationData с нормальными полями. Тогда код будет выглядеть кораздо более читабельным и не потребует от языка никаких дополнительных фич.
        Ответить
        • А может все-таки стоит задуматься о плохом изначальном выборе формализма? Может все-таки этот формализм плохо совместим с реальными возможностями? Если типы заставляют отказаться от ипсользования части возможностей языка, может проблема в типах, а не в возможностях?
          Ответить
          • Множественный возврат это типа супер нужная возможность? Я вижу ей только два применения:
            1. Вернуть фиксированное кол-во однородных значений (точка в пространстве, частное и остаток). Кортеж отлично с этим справляется, заодно утверждая, сколько именно значений должно вернуться и каких они типов.
            2. Возврат результата и кода ошибки. Either в этом случае гораздо лучше.

            В контексте того, что в топике, я предпочту
            getLocationData(request).radius()
            , нежели
            nthArgument(6, getLocationData(request))
            Ответить
            • Нет, это ограниченность мировосприятия, своего рода Сапир-Ворф в действии. Если я не могу охарактеризовать происходящее в известной мне терминологии, то я буду отрицать очевидное существование происходящего вместо того, чтобы изменить терминологию.
              Ответить
              • Ну программировал я на Go, там есть множественный возврат. В 99.9% случаев он там используется для возврата кода ошибки. Я бы предпочёл наличие механизмов вроде Either.

                Вы можете привести примеры адекватного и удобного использования множественного возврата? Или реальные сложности, возникающие при использовании кортежей? Зачем вставлять в язык возможности, которые легко заменяются более простыми и удобными средствами? Мной движет лишь бритва Оккама, а не ограниченность.
                Ответить
                • "Я всегда выходил через окно, потому что жил на первом этаже, и мне это не мешало. Зачем нужны двери, если можно делать только окна, и этого будет достаточно?"
                  В Forth большинство "функций" (слов) возвращают больше одного значения, например. Банально строки передаются от функции к функции как два значения: указатель на выделеную память и длина строки.
                  Ответить
                  • > указатель на выделеную память и длина строки
                    Ну это конкретное решение конкретного языка. Непонятно, почему это должно быть лучше или изящнее, чем передача типа "строка", скрывающего в себе детали реализации. То, что так сделано в Forth, ещё не значит, что этот подход чем-то лучше.
                    Ответить
                    • Вот, это как раз и есть отрицание очевидного, селективное чтение и соответственно непонимание прочитанного.
                      Я говорю, что в Forth большинство функций возвращают больше одного значения, и привожу в качестве аргумента ситуацию, которая встречается очень часто (ни одна даже самая тривиальная программа ее не избежит). Но в ответ я вижу "да это единичный случай". Может стоит все-таки взять и прочитать аргумент перед тем, как отвечать?
                      Ответить
                      • Чем тебе кортежи или списки не угодили? Тем что нельзя составить список разных типов? А чем тебе структуры не угодили для множественного возврата? Так получишь именованные возвращаемые несколько значений.
                        Ответить
                      • > это как раз и есть отрицание очевидного, селективное чтение и соответственно непонимание прочитанного

                        Так точно, сэр. Я просил:
                        >> примеры адекватного и удобного использования множественного возврата? Или реальные сложности, возникающие при использовании кортежей?

                        Ответ:
                        > в Forth большинство функций возвращают больше одного значения

                        Ну и что с того? Это удобнее или безопаснее, чем нормальные типы и кортежи? Почему? Это даёт хороший выигрыш в производительности?

                        Пока что я вижу только такую цепь рассуждений:
                        я охуенен, я осилил форт
                        -> форт охуенен (ведь говно я бы осиливать не стал)
                        -> форт использует множественный возврат
                        -> множественный возврат охуенен
                        Ответить
                        • "В реальности земля шарообразная, но мне удобнее думать о ней так, как если бы она была плоской, и потери при этом не существенные, поэтому я буду думать, что земля плоская."
                          Почему кортежи плохо - я уже объяснил. Потому что формализм функций плохо подходит к программированию в целом, если его ограничивать только функциями. Это порочное извращение действительности привитое дефективными языками типа Каскеля. В программировании есть процедуры, а не функции. А кортежи - это попытка через жопу сымитировать то, что на базисном уровне было зачем-то запрещено в пределах дефективного языка.
                          Ответить
                          • Как всегда много оскорблений и воды, никакой чёткой разумной причины. Слив засчитан.
                            Ответить
                            • Лол. Как всегда переход на безаргументную полемику в духе "а мне все похуй, я все равно лучше знаю". На что может быть в принципе всего один ответ: "слив засчитан".
                              Ответить
                              • Что тварят... И это в разделе пхп... Что подумают бедные школьники, изучающие пхп, поглядев на взрослых дядек?
                                Ответить
                  • > указатель на выделеную память и длина строки
                    Это две части одной сущности ;) Друг без друга они практически бесполезны. Поэтому концептуально эти функции возвращают одно значение (хотя технически два).

                    Можно другой пример?
                    Ответить
                    • Бла-бла бла. Это для тех кто не понял. На функции написано "возвращает 2 значения". После запуска, функция таки возвращает два значения. Используя любую применимую арифметику, считая до двух, мы все равно получаем два значения.
                      Но тут откуда ни возьмись появляется всезнающий разум, который говорит, что это значение на самом деле одно, и что черное это просто очень темное белое, а мокрое это такая крайняя разновидность сухого и т.д.

                      > Можно другой пример?
                      Все операции работающие со стеком принимают по нескольку аргументов и возвращают столько же / или даже больше значений.
                      Ответить
                      • > Все операции работающие со стеком принимают по нескольку аргументов и возвращают столько же / или даже больше значений.
                        Вот только не надо экстраполировать их на другие языки... Эти операции за пределами форта вообще не имеют никакого смысла, т.к. в других языках нет такой встроенной сущности как data-stack.

                        А если считать data-stack обычной глобальной структурой данных, то, внезапно, форт слова вообще ничего не возвращают и вообще ничего не принимают. Тот же эффект можно получить и в сишке:
                        int data_stack[100500];
                        int *data_pointer = data_stack;
                        
                        void dup() {
                            data_pointer[0] = data_pointer[-1];
                            data_pointer++;
                        }
                        Ответить
                        • А если компьютер не включать, то программа на Форте вообще не запустится. Как жеж так, блин! Все пропало.
                          Такой вид рассуждений был описан Грайсом как "разговорная импликатура", т.е. когда из утверждения выбирается не то, что утверждалось, а какой-то аспект, который тоже мог бы быть истинным, буде изначальное утверждение истинным. Ну и дальнейшие махинации со смыслом утверждения не следующего явно из изначального утверждения в дальнейшем подаются за обоснование / опровержение первого.
                          Ответить
                      • > Но тут откуда ни возьмись появляется всезнающий разум, который говорит, что это значение на самом деле одно, и что черное это просто очень темное белое, а мокрое это такая крайняя разновидность сухого и т.д.

                        Ну так надо приводить яркий и наглядный пример, с которым оппонент не сможет поспорить... А не эту фигню про адрес и длину.

                        P.S. Тот же /mod был бы куда более ярким примером.
                        Ответить
                        • Ну вот, есть формализм, та же ТК. исходя из умозаключений которой в программе могут быть только функции. Потому что так какому-то мудаку было удобно.
                          С другой стороны, имеем яркий пример, не просто экзотической случай, а несколько не связаных друг с другом языков в которых кроме функций есть процедуры (лучше описаные как отношения), для которых функции являются их подклассом.
                          И тем не менее, в качестве контраргумента приводятся языки в которых почему-то решили пойти по пути обозначеном вышеупомянутым мудаком.
                          Чтобы опровергнуть предыдущее утверждение не нужно искать ущербный язык в котором что-то не реализовано, или реализовано плохо. Нужно показать, что описаная выше ситуация не случается никогда.
                          Ответить
                    • В императивных языках все процедуры возвращают столько аргументов, сколько байт в доступной оперативной памяти. Просто не все байты изменяются после вызова процедуры.
                      Ответить
                      • Императивная программа принимает на вход мир, и возвращает его измененным. Поэтому она функционально чиста.
                        Ответить
                        • После выполнения миров не становиться N+1, так что нет
                          Ответить
                          • > миров не становиться N+1
                            откуда тебе знать
                            Ответить
                          • Ты не сможешь проверить это экспериментально ;)

                            > После выполнения миров не становиться N+1
                            Да и GC же. На старый мир ссылок нет, поэтому он удаляется.
                            Ответить
                            • Кстати, а как объясняется многоядерность и работа нескольких компьютеров с одним и тем же миром? Функциональная чистота теряется, или её можно в чём-то найти?
                              Ответить
                              • > Кстати, а как объясняется многоядерность и работа нескольких компьютеров с одним и тем же миром?
                                Каждая прога содержится в мире, который ей передали на вход ;) Поэтому прога может посмотреть в свой аргумент, и увидеть, что делают остальные.
                                Ответить
                                • А как объяснить запуск различных прог: клиента и сервера соответственно на разных машинах?
                                  Ответить
                                  • > А как объяснить запуск различных прог: клиента и сервера соответственно на разных машинах?
                                    С точки зрения одной проги других прог,
                                    других машин, и даже пользователей просто не существует. Они есть только в ее воображении (в аргументе world).
                                    Ответить
                                • >Поэтому прога может посмотреть в свой аргумент, и увидеть, что делают остальные.

                                  это уже не функциональщина
                                  Ответить
                                  • > это уже не функциональщина
                                    Почему? Чистые функции имеют полное право смотреть на свои аргументы и возвращать их измененные копии ;)
                                    Ответить
                                    • >Почему? Чистые функции имеют полное право смотреть на свои аргументы и возвращать их измененные копии ;)

                                      Вот только сказать по входным значениям что в это время с ними делают остальные нельзя
                                      Ответить
                                      • > Вот только сказать по входным значениям что в это время с ними делают остальные нельзя
                                        Входные значения - мир, а в мире содержатся остальные.
                                        Ответить
                                        • То бишь проверять что делают остыльные методом из запуска от текушего мира? Бесконечная косвенная рекурсия?
                                          Ответить
                                          • Один мой друг, он стоил двух, он ждать не привык, и каждый день УЧИЛ ХАЦКИЛ СОШЕЛ С УМА ДУМАЕТ НАШ МИР ИММУТАБЕЛЬНАЯ МАТРИЦА ЗИГОХИСТОМОРФНЫЙ ПРЕПРОМОРФИЗМ НА АНАФОРИЧЕСКИХ ЛЯМБДАХ
                                            Ответить
                                          • > Бесконечная косвенная рекурсия?
                                            ОМГ, я начал себе представлять наш фрактальный мир.
                                            Если отказаться от квантования, можно вместить в мир ещё сколь угодное количество его копий.
                                            Ну а вычислять поведение остальных можно с какой-то точностью, не учитывая, что другие думают о нас.

                                            Есть ещё спорное утверждение:
                                            К тому же, наш результат в силу нашей функциональной чистоты должен зависеть от мира, но не от наших хаотичных раздумий о нём, следовательно можно утверждать, что другие, не имея возможности просчитать эту рекурсию, не смогут дать результат, основанный на вычислении наших намерений. А потому, можно не погружаться в рекурсию, чтобы узнать, что они делают.
                                            Ответить
                                            • Движенья нет, сказал мудрец брадатый.
                                              Другой смолчал и стал пред ним ходить.
                                              Сильнее бы не мог он возразить;
                                              Хвалили все ответ замысловатый.
                                              Но, господа, забавный случай сей
                                              Другой пример на память мне приводит:
                                              Ведь каждый день пред нами солнце ходит,
                                              Однако ж прав упрямый Галилей.
                                              Осталось еще вплести в это всё теорию относительности - что кванты (волны) света несут в аргументе снимок прошлых состояний мира.
                                              /thread
                                              Ответить
                                            • не погружаясь не получим ответ
                                              Ответить
                                              • > не погружаясь, не получим ответ
                                                Вот тут есть на это ответ: http://govnokod.ru/13938#comment200374
                                                Земля притягивает Солнце, изменяя его положение, которое зависит от положения Земли, которое изменяется из-за притяжения Солнца, которое зависит от положения Земли. Но в реальности всё работает.
                                                Операционный усилитель с ООС работает.
                                                И fix $ const f работает, а не уходит в бесконечную рекурсию.
                                                Так почему же программы должны не работать?
                                                Ответить
                                                • Земного притяжения не существует, это всего лишь теория...
                                                  С уважением, Ваш кэп.
                                                  Ответить
                                                  • > Земного притяжения не существует, это всего лишь теория...
                                                    > С уважением, Ваш кэп.
                                                    Солипсизм третьей степени.
                                                    Ответить
                                                    • Это не шутка. Физика НИКАК не объясняет земное притяжение. Это всего лишь теория, на которой построены другие теории, так как наука не может стоять на месте.
                                                      Ответить
                                                      • Если что-то не обьясняется не значит что этого нет. Читая квантач начинает это хорошо понимать
                                                        Ответить
                                                        • В данном случае твой принцип выполняется наоборот - все хорошо описано, но на самом деле не так. Попроси у бога исходники, может поделится.
                                                          Ответить
                                                • > Земля притягивает Солнце, изменяя его положение, которое зависит от положения Земли, которое изменяется из-за притяжения Солнца, которое зависит от положения Земли. Но в реальности всё работает.

                                                  Притяжение солнца к земле и земли к солнцу это как бы одно и тоже притяжение

                                                  > Операционный усилитель с ООС работает.

                                                  не путаем физику и программирование.

                                                  > Так почему же программы должны не работать?

                                                  напиши, скомпиль да запусти.
                                                  Ответить
                                                  • > Притяжение солнца к земле и земли к солнцу это как бы одно и тоже притяжение
                                                    А раздумья одной программы о других программах и их раздумья обо всех остальных - это всего лишь часть одного и того же процесса преобразования мира. Мир меняется, программы работает, значит их зависимость разрешается так же просто, как зависимость Солнца и Земли.

                                                    > не путаем физику и программирование
                                                    Путаница только в том, что нельзя создать программу, которая на 100% скопирует физический объект. Пока - из-за большого количества атомов, потом - из-за каких-нибудь ограничений квантовой физики.
                                                    А так - берём большой кусок мира, содержащий физический объект, применяем к нему функцию "физика", преобразующую мир в новый мир по найденным учёными законам - результатом этого будет мир после того, как объект что-то сделал. С нужной точностью.
                                                    Ответить
                                                    • > Притяжение солнца к земле и земли к солнцу это как бы одно и тоже притяжение

                                                      я все еще не уверен, кто же из вас больше туп: ты или кенган
                                                      )
                                                      p/s/ я не говорю, что я умнее вас. Возможно, мы братья по тупостиразуму
                                                      Ответить
                                                      • >> Притяжение солнца к земле и земли к солнцу это как бы одно и тоже притяжение
                                                        > я все еще не уверен, кто же из вас больше туп: ты или кенган
                                                        Ты так говоришь, как-будто это разные притяжения :) Эта сила действует на оба тела одинаково. Просто у солнца масса больше, поэтому оно получает меньшее ускорение, чем земля.
                                                        Ответить
                                                        • Это один юзер?
                                                          Я догадывался...
                                                          Ответить
                                                          • > Это один юзер?
                                                            Выходит, не только kegdan и 1024-- - один и тот же юзер, эти два товарища - на самом деле - bormand?

                                                            Ура, я - bormand, пойду расскажу об этом Кутузову и Наполеону, а то они меня Гитлером считали, окаянные.
                                                            Ответить
                                                      • Мы вольны группировать что угодно, если это не противоречит используемым нами аксиомам :)

                                                        kegdan спокойно может группировать плохие явления в одно хорошее (как программист, он может группировать модули с циклическими зависимостями в общий модуль без оных).
                                                        Кстати, всё началось, когда bormand сгруппировал формальные аргументы нечистой функции с остальным миром, сотворив чистую функцию.
                                                        Ответить
                                                      • >> Притяжение солнца к земле и земли к солнцу это как бы одно и тоже притяжение

                                                        >я все еще не уверен, кто же из вас больше туп: ты или кенган

                                                        Учебником физики тебя по голове, неуч
                                                        Ответить
                                                        • > Учебником физики тебя по голове, неуч
                                                          Стертор, хоть и тролль, но дело говорит.
                                                          Аксиомы никто не доказывал, вся наука - вера в аксиомы и правила следования.
                                                          Ответить
                                                    • >Мир меняется, программы работает, значит их зависимость разрешается так же просто, как зависимость Солнца и Земли.

                                                      мир не меняется. Это основа фунциональщины.

                                                      >Путаница только в том, что нельзя создать программу, которая на 100% скопирует физический объект. Пока - из-за большого количества атомов, потом - из-за каких-нибудь ограничений квантовой физики.
                                                      А так - берём большой кусок мира, содержащий физический объект, применяем к нему функцию "физика", преобразующую мир в новый мир по найденным учёными законам - результатом этого будет мир после того, как объект что-то сделал. С нужной точностью.

                                                      Вот только в реальности все процессы стремятся к минимуму потенциальной энергии, а в программировании тупая рекурсия может не закончиться никогда.
                                                      Ответить
                                                      • > мир не меняется. Это основа фунциональщины.
                                                        Да вы же сверху обсуждали... Мир не меняется, просто создаётся новая копия, а старую забирает GC, что мы в своей речи называем "мир меняется".
                                                        Всё "мир меняется" можно заменить на "к миру применили чистую функцию "физика" и получили новый мир".

                                                        > а в программировании тупая рекурсия может не закончиться никогда.
                                                        Можно либо подогнать функцию, которая заменит рекурсию на её отсутствие (как в случае с притяжением), либо использовать функцию, которая даст нам результат с какой-то точностью (быть может, на уровне "много"-"мало"; но если другие программы будут тоже думать о нашей в терминах "много"-"мало", мы не проиграем и не упустим самой сути)
                                                        Ответить
                                                        • >Да вы же сверху обсуждали... Мир не меняется, просто создаётся новая копия, а старую забирает GC, что мы в своей речи называем "мир меняется"

                                                          мир меняется
                                                          World.state = new State()

                                                          мир создается
                                                          World newWorld = new World()

                                                          Тут как не меняй понятия, а мир все рано не меняется. Создается на основе старого - да, но не меняется.

                                                          > которая заменит рекурсию на её отсутствие

                                                          чито я не поняль?

                                                          >которая даст нам результат с какой-то точностью

                                                          с некоторой точностью сказать, что сейчас делает другая функция?)
                                                          Ответить
                                                          • > Тут как не меняй понятия, а мир все рано не меняется. Создается на основе старого - да, но не меняется.
                                                            Я не меняю понятия, нарушая функциональную чистоту программы.
                                                            f1 (изменившийся мир) == (f1 . физика) (старый мир)

                                                            > Тут как не меняй понятия, а мир все рано не меняется.
                                                            Я и не говорю об обратном.

                                                            > чито я не поняль?
                                                            Можно считать, что положение Земли r - это функция f от положения Солнца, которое - функция F от положения Земли.
                                                            r = f(F(f(F(f(F(...(R)...)))))), а можно послушать kegdanа, понять, что это одно и то же явление, и взять функцию, которая сразу даёт нужный результат.

                                                            > с некоторой точностью сказать, что сейчас делает другая функция?)
                                                            "Другая функция сейчас выполняет свою работу." Я сказал, что делает другая функция, пользуясь нулевым приближением. Используя исходники функции (они есть в аргументе "мир") и проверив, исполняет ли её сейчас какой-то компьютер, можно ещё что-нибудь полезное сказать.
                                                            Ответить
                                                            • >Я не меняю понятия, нарушая функциональную чистоту программы.
                                                              f1 (изменившийся мир) == (f1 . физика) (старый мир)

                                                              Ну так преобразований происходит много и одновременно какой из становиться новый, какие в мусорку?

                                                              > Можно считать, что положение Земли r - это функция f от положения Солнца, которое - функция F от положения Земли.

                                                              Мне кажется это пример хреновой аналитики
                                                              Вводим оба два тела.

                                                              let SunPosition, EarthPosition = RecalculatePositon Sun Earth Time

                                                              >>> которая заменит рекурсию на её отсутствие

                                                              >>чито я не поняль?

                                                              Я все равно не понял что значит заменить рекурсию на ее отсутствия. по - русски, пожалуйста

                                                              >"Другая функция сейчас выполняет свою работу."

                                                              Не факт. Мы могли просто запустить одну из многих функций. Остальные могут сейчас ничего не делать. А из функции проверить это все равно нельзя
                                                              Ответить
                                                              • > Ну так преобразований происходит много и одновременно какой из становиться новый, какие в мусорку?
                                                                Можно рассматривать только течение времени. Считать, что в каждый новый момент возникает новое состояние мира, которое зависит только от предыдущего состояния мира. Предыдущее (более старое состояние по времени) выбрасывать.
                                                                Исполнение программы привязывать к двум состояниям - когда программа начала исполняться и когда закончила. Кажется, что программа изменила мир, или породила новый, а на самом деле просто мир перешёл в новое состояние под действием некоторой чистой функции.

                                                                > Мне кажется это пример хреновой аналитики
                                                                Тогда я скажу, что http://govnokod.ru/13938#comment200367 - пример хреновой аналитики, поскольку там рекурсия выдута из того же пальца.
                                                                И я уже говорил про свой аналог RecalculatePositon - это функция "физика".

                                                                > Я все равно не понял, что значит заменить рекурсию на ее отсутствие. по-русски, пожалуйста
                                                                "подогнать функцию, которая заменит рекурсию на её отсутствие" -> найти такую новую функцию, которая не будет рекурсивной в отличие от старой - рекурсивной и потому плохой.
                                                                Т.е. от F(f(F(f(... перейти к RecalculatePositon; от факториала перейти к формуле Стирлинга и т.п.

                                                                > Остальные могут сейчас ничего не делать. А из функции проверить это все равно нельзя
                                                                Получив мир на вход, можно считать из памяти нужного компьютера данные, относящиеся к нужной функции и сказать, на какой стадии исполнения находится функция.
                                                                Если лень просчитывать, в каждый новый момент можно читать новое состояние мира и смотреть, что делает интересующая нас функция.
                                                                Ответить
                                                                • >Можно рассматривать только течение времени. Считать, что в каждый новый момент возникает новое состояние мира, которое зависит только от предыдущего состояния мира. Предыдущее (более старое состояние по времени) выбрасывать.

                                                                  Исполнение программы привязывать к двум состояниям - когда программа начала исполняться и когда закончила. Кажется, что программа изменила мир, или породила новый, а на самом деле просто мир перешёл в новое состояние под действием некоторой чистой функции.

                                                                  это совершенно другая ситуация

                                                                  >Получив мир на вход, можно считать из памяти нужного компьютера данные, относящиеся к нужной функции и сказать, на какой стадии исполнения находится функция.

                                                                  не в функциональном программировании
                                                                  Ответить
                                                                  • > не в функциональном программировании
                                                                    в функциональном программировании кто-то запрещает читать аргументы функции? повесить его.
                                                                    А читать в какой-то новый момент времени тоже можно, поскольку во-первых, это новое состояние появилось после применения чистой функции, а во-вторых, даже если бы оно так не появилось, никого бы не волновало, что мы делаем со своим аргументом внутри.

                                                                    > это совершенно другая ситуация
                                                                    Значит, эти две ситуации эквивалентны.
                                                                    Ответить
                                                                    • > в функциональном программировании кто-то запрещает читать аргументы функции? повесить его.

                                                                      аргумент один. мир

                                                                      >это новое состояние появилось после применения чистой функции

                                                                      при последовательном запуске - пожалуйста. при паралельном - нет. Функция не меняет мир, повторяю, она новый создает. Менять и фунциональщина несовместимы

                                                                      >> это совершенно другая ситуация
                                                                      >Значит, эти две ситуации эквивалентны.

                                                                      вот это логика
                                                                      Ответить
                                                                      • > при последовательном запуске - пожалуйста. при паралельном - нет. Функция не меняет мир, повторяю, она новый создает.
                                                                        Мир меняется (или пересоздаётся - не важно) сам, две параллельно работающие функции получают свой конкретный результат только потому, что так совпало, поскольку миру было угодно измениться в такую сторону. Если бы функции запустили последовательно, их результат был бы другим, но они всё ещё чистые, поскольку до этого их аргумент (мир) был другим.

                                                                        > Менять и фунциональщина несовместимы
                                                                        Мы тут говорили о чистых функциях, локальные вкрапления императивности и присваивания не всегда нарушают чистоту.
                                                                        Иначе бы теорема Борманда об императивных программах была сразу отвергнута нами, поскольку в императивных программах меняют много, люто и бешено.

                                                                        >>> это совершенно другая ситуация
                                                                        >> Значит, эти две ситуации эквивалентны.
                                                                        > вот это логика
                                                                        Ну а какая была ситуация "та", которая не другая? По-моему, у нас по-прежнему есть мир и есть запущенные программы. Ни про что другое я не говорил.
                                                                        Рекурсивное описание притяжения Солнца и Земли эквивалентно описанию через RecalculatePositon, эквивалентно гигантскому набору уравнений, описывающему каждую молекулу и их взаимодействие.
                                                                        Аналогично, рекурсивная теория Кегдана эквивалентна аксиоме о стадийных переходах мира.
                                                                        Ответить
                                                                        • >Мир меняется (или пересоздаётся - не важно)

                                                                          Важно. Очень важно

                                                                          >две параллельно работающие функции получают свой конкретный результат только потому, что так совпало, поскольку миру было угодно измениться в такую сторону.

                                                                          Иисус его изменил что ли?)

                                                                          > Если бы функции запустили последовательно, их результат был бы другим, но они всё ещё чистые, поскольку до этого их аргумент (мир) был другим.

                                                                          Давайте встанем в круг. Видение задачи изложите

                                                                          >локальные вкрапления императивности и присваивания не всегда нарушают чистоту.

                                                                          Как и черный цвет кожи не мешает быть арийцем

                                                                          > Иначе бы теорема Борманда об императивных программах была сразу отвергнута нами, поскольку в императивных программах меняют много, люто и бешено.

                                                                          Ля теорема? Приведите

                                                                          >Ну а какая была ситуация "та", которая не другая? По-моему, у нас по-прежнему есть мир и есть запущенные программы. Ни про что другое я не говорил.
                                                                          Рекурсивное описание притяжения Солнца и Земли эквивалентно описанию через RecalculatePositon, эквивалентно гигантскому набору уравнений, описывающему каждую молекулу и их взаимодействие.

                                                                          где то в этом месте младенец Иисус плачет

                                                                          Повторяю - давайте встанем в круг

                                                                          Хотя если честно мне надоело. Но из принципа могу продолжить
                                                                          Ответить
                                                                          • >>Мир меняется (или пересоздаётся - не важно)
                                                                            >Важно. Очень важно
                                                                            Нельзя различить изменение мира и его пересоздание. Потому и важность сомнительна.
                                                                            (Если поверить в независимые итерации мира, всё становится проще.)

                                                                            > Иисус его изменил что ли?)
                                                                            Мир изменился сам, его изменил Иисус, или мир изменился под действием 100500 компьютеров, вычисляющих функции - эквивалентные объяснения.
                                                                            Мир был одним, а стал другим. Потому, что был в одном состоянии, а перешёл в другое.

                                                                            > Давайте встанем в круг. Видение задачи изложите
                                                                            > Ля теорема? Приведите
                                                                            Теорема: "Императивная программа принимает на вход мир, и возвращает его измененным. Поэтому она функционально чиста."
                                                                            Наша задача - обсудить теорему. Есть мир, есть функции, которые исполняются где-то и магическим образом получают мир в качестве аргумента, функции возвращают какой-то новый или изменённый мир.

                                                                            >Как и черный цвет кожи не мешает быть арийцем
                                                                            Эта функция - не чистая? Почему?
                                                                            function cube(x){
                                                                              var y = 1;
                                                                              for(var i=0; i<3; ++i) y *= x;
                                                                              return y;
                                                                            }


                                                                            > где то в этом месте младенец Иисус плачет
                                                                            Почему же плачет? Мы строим рекурсивные формулы описания явления, основываясь на научных фактах. Эти формулы полностью описывают явление.
                                                                            Далее мы строим другие формулы, которые тоже основываются на научных фактах и тоже полностью описывают явление. Поскольку каждый набор формул полностью описывает явление, можно считать эти наборы эквивалентными, если наука - не чушь.

                                                                            > Хотя если честно мне надоело. Но из принципа могу продолжить
                                                                            И мне надоело. Но в споре рождаются истина и лулзы.
                                                                            Ответить
                                                                            • Я не разобрался, кто из вас троллит, да и не важно это. Может, хватит кормить?
                                                                              Ответить
                                                                            • >Теорема: "Императивная программа принимает на вход мир, и возвращает его измененным. Поэтому она функционально чиста."

                                                                              для опровержения достаточно привести программу, которая при одинаковом входе предоставляет разный выход. В этом контексте даже банальный вывод времени не чисто функционален

                                                                              >Эта функция - не чистая? Почему?
                                                                              function cube(x){
                                                                              var y = 1;
                                                                              for(var i=0; i<3; ++i) y *= x;
                                                                              return y;
                                                                              }

                                                                              зависит от контекста. Чистая, если Y на каждом шаге скрывает предыдущее значение, а не изменяет его
                                                                              Ответить
                                                                              • > Чистая, если Y на каждом шаге скрывает предыдущее значение, а не изменяет его
                                                                                Сайд-эффектов у этой функции нет, результат зависит только от аргумент x. Значит эта функция чиста. А то, что она внутри себя y и i меняет - это никого не волнует. Ибо чистота определяется интерфейсом, а не реализацией.
                                                                                Ответить
                                                                                • Забавно. То есть теория теорией, а на практике все прозаичнее?)
                                                                                  Ответить
                                                                                  • > а на практике все прозаичнее
                                                                                    Ну да. У меня и на сишке очень многие функции чистые. Просто потому что так удобней поддерживать/тестировать :)
                                                                                    Ответить
                                                                                    • >Просто потому что так удобней поддерживать/тестировать :)

                                                                                      Это первое что подкупает в функциональщине)
                                                                                      Ну и распараллеливание без лишней мороки)
                                                                                      Сейчас большенство языков позволяют писать функциональных код. Начал изучать фунциональшину и удивился сколько из этого я уже использовал в императивных языках
                                                                                      Ответить
                                                                              • > для опровержения достаточно привести программу, которая при одинаковом входе предоставляет разный выход. В этом контексте даже банальный вывод времени не чисто функционален

                                                                                На компьютере идут часы, откуда программа берёт время для вывода. Этого аргумента достаточно для функциональной чистоты, даже мир передавать не надо.

                                                                                Я думаю, искать антипример, который удовлетворит всех, надо в области квантовой физики. Предлагать какой-нибудь источник случайных чисел.
                                                                                В этом случае оппонентам надо будет как минимум знать квантовую физику (что значительно снижает их количество), а единственный аргумент "учёные просто не осознали физику процесса, потому назвали его случайным" ересью попахивает.
                                                                                Ответить
                                                                                • > вывод времени
                                                                                  Времени нет ;) Есть только причинно-следственные связи между событиями.
                                                                                  Ответить
                                                                                  • Вот человек, который меня понимает) Точнее - мою проблему)
                                                                                    Ответить
                                                                                    • >> Времени нет ;)
                                                                                      > Вот человек, который меня понимает) Точнее - мою проблему)
                                                                                      Надо было меньше на ГК сидеть :)
                                                                                      Ответить
                                                • Травка осталась?
                                                  Ответить
                                                  • Я курил матан. Рекомендую
                                                    Ответить
                                                    • Алексей Бабушкин наверное тоже курил матан, когда предложил свой алгоритм.
                                                      Ответить
                                                  • bormand начинает жалеть о своем вбросе...
                                                    Ответить
                                                    • Kegdan like it
                                                      Ответить
                                                    • На самом деле я только начал фукциональщину учить, думал буду нести бред меня умный дяденька (борманд) стукнет по голове. Но тред ушел от фунциональщины, так что....
                                                      Ответить
                                                      • Тоньше надо троллить.
                                                        с уважением, Ваш кэп
                                                        Ответить
                                                    • Глухие телефоны, лол. На вход мир это ведь привет мир будет. Через 2 сообщения это будет мир который привет (он же безумный).
                                                      Через 10 это будет гоатсе. Через 20 это будет компилятор, питух и строка существующая в разных измерениях и представляющая различные состояния одного и того же кванта, как пацаны выше обсуждали.
                                                      Ответить
                                                      • Ты немного ошибся: Стадия гоатсе происходит уже сейчас в данный момент...
                                                        Мигающее, с красным анусом.
                                                        Ответить
                                                  • Курил теорему Борманда. Она всё ещё находится чуть выше.
                                                    Ответить
    • list(,,,,,,$whatewer,,,) = $array;
      $radius = func()[$n]; // PHP 5.4<
      Ответить

    Добавить комментарий