Во понесло... -два гения на форуме это хорошо Может простых смертных в покое оставят
Во понесло... -два гения на форуме это хорошо Может простых смертных в покое оставят
электронщик до мозга костей и не только
Процитируйте хоть какой-нибудь источник, где говорится о чистоте функций или о детерминированности функций или о побочных эффектах в том виде, в котором вы предлагаете.
Сейчас получается так, что вы сами себе придумали определение чистоты функции, и бросаетесь им направо и налево.
Так не работает.
Давайте хоть какую-нибудь ссылку -- можно будет предметно обсуждать.
Я приводил Wikipedia (русские и английские статьи) -- вы говорите, что автор статей ничего не понимает.
Я приводил ссылку на https://www.schoolofhaskell.com -- вы игнорируете.
Вот вам ссылка на stackoverflow:
Вот вам ссылка на haskell.org:Сообщение от stackoverflow
То, что в обычных языках называется "побочным эффектом" можно сэмулировать монадой.Сообщение от haskell.org
Я утверждал, что SR триггер в смысле ОЛ обладает побочным эффектом, и как раз вы использовали монаду. Совпадение? Не думаю!
Ещё из haskell.org:
Иными словами, в чистых функциях запрещено выполнять какие-то дополнительные действия (yield actions) кроме как возвращать значение. Как раз таким "дополнительным действием" и является увеличение переменной counter в функциях abcd/abcd2. Как раз таким действием и является изменение состояния триггера в ОЛ.Сообщение от haskell.org
Я к чему: море ссылок подтверждают мою позицию. Обратите внимание: они подтверждают не моё определение, а мою позицию. Вы же машете своим собственным определением (которое отличается от общепринятых) и смешиваете его с общепринятыми.
Ещё раз: в предложенной вами формулировке "чистая функция это та, которая зависит только от полной истории прошлых запусков", да, SR триггер является чистой функцией.
Но это бред сивой кобылы, т.к. обычно под чистыми функциями понимают совсем другое.
Если вы изобрели геометрию Лобачевского (ну, прямо своё понимание чистых функций) -- не вопрос. Но не надо тогда примазываться к словам "раз функция чистая, то её проще тестировать".
Согласно вашему определению "чистоты" подавляющее большинство функций являются чистыми, и такое определение теряет пользу.
Да уж точно. Хотел за вчера-сегодня еще один макрос довести до ума и описание написать, а вместо этого обсуждаю чистые функции...
Вот представьте, если я любую функцию в названии которой нет буквы Ы буду называть чистой.
И попробуйте меня аргументированно убедить в том, почему это плохая идея.
Вы действуете именно так. Придумали себе определение (которое ну ничем не подтверждается), и потом размахиваете этим утверждением, и даже делаете выводы ("раз функция чистая, то её просто тестировать")
Это называется "слышал звон, да не знаешь, где он".
Это не я должен убеждать вас в том, что "вы сами себе придумали плохое определение".
А это вы должны аргументировать почему ваше определение совпадает с общепринятым.
У вас понятие чистой функции аксиоматическое. Вот это назвали чистой функцией и баста, значит так оно и есть. Вас вероятно не интересует, для чего вообще выделять какой-то класс функций в отдельную категорию, какие существуют преимущества и недостатки таких функций, как можно расширить или сузить данное определение, чтобы преследовать какую либо практическую цель.
У меня же понятие чистой функции концептуальное. Я предполагаю, для чего это было сделано и на основании того, что то что предлагаю я, ничем не хуже, предлагаю и это тоже называть чистой функцией. Для меня общепринятая аксиоматика не является догмой, но лишь некой исходной точкой, от которой можно отталкиваться для дальнейшего обсуждения.
У меня понятие одновременно и аксиоматическое и практическое.
Аксиоматику посмотрите в ссылках выше.
Практическое применение: чистую функцию (чистую в том плане, что она не зависит от истории прошлых запусков, при одинаковых аргументах всегда возвращает одно и то же значение, и при этом не совершает каких-либо побочных действий кроме возвращения значения) add :: Int -> Int -> Int тестировать гораздо проще, чем функцию add2 :: Int -> Int -> Int, которая зависит от истории предыдущих запусков.
Если результат функции не зависит от истории прошлых запусков, то гораздо проще понять что она делает, как она работает.
Если же результат функции зависит от истории запуска, то анализировать, понимать и тестировать её гораздо сложнее. Появляются разные варианты "а что, если сигнал на этот вход придёт раньше или позже? А что, если сигнал придёт два раза? А этот счётчик может переполниться?".
Вот реальный пример:
Это как раз пример того, что функцию, которая зависит не только от входных параметров, но ещё и от истории запусков проверять гораздо сложнее.Сообщение от Threac-25
И эту ошибку нашли ценой гибели реальных пациентов.
Последний раз редактировалось Владимир Ситников; 21.04.2017 в 21:33.
Исследуйте что хотите, но не пишите ересь типа такой:
При поиске в Google/Яндекс находятся вполне конкретные определения для слов "детерминированная функция" и "побочный эффект".
И эти определения никак не связаны с вашим определением. В ваш класс "чистых функций" входит гораздо больше функций, чем обычно принято.
Поэтому исследуйте что хотите и как хотите. Можно отдельную тему создать про это.
Но подменять смысл каждого слова нехорошо.
Получается, фраза "Каждый макрос в нем есть детерминированная функция без побочных эффектов" верна, если слова "детерминированная функция" и "без побочных эффектов" понимаются в том смысле, в котором их думал anthrwpos.
Это по меньшей мере странно, а в обычном понимании это полный бред.
Вот вам пример: anthrwpos -- дурак.
А, если вы скажете, что "ей -- смотрите, Владимир ругает и оскорбляет", то я скажу, что слово "дурак" тут означает "человек, разбирающийся в haskell state monad".
Хорошо так? По-моему, нехорошо.
Поэтому мне и не нравится, когда вы жонглируете словами, вкладывая в них свой смысл, который ну никак невозможно найти в Google.
Извиняюсь, тут наверно нужно приоритеты расставить, список составить очерёдности кого ругать, что-то овен ругать желающих кот наплакал, вот посмотрите, тоже по своему всё называют:
http://www.owen.ru/forum/showthread....EF%F0%EE%F1%FB
Если проблему можно решить за деньги, это не проблема, это расходы. Бог каждому посылает проблемы по его силам. Так что одно из двух. Либо ты можешь-таки
справиться с проблемами, либо это не твои проблемы.
Это всё разные вопросы.
Когда я предложил разработчикам ОВЕН называть "обратную связь" "линией задержки", то они пошли навстречу и в ОЛ 1.9 внесли такое изменение.
Разумеется, часть решений принята уже настолько давно, что, если сейчас что-то переименовать (например, INT в UNIT), то все начнут путаться.
Да, ОВЕН обновляется небыстро, но они хоть как-то реагируют.
anthrwpos же ну никак не хочет признать, что неправ, когда произносит слова "Каждый макрос в нем есть детерминированная функция без побочных эффектов".
Эту ошибку гораздо проще исправить, чем переписать ОЛ, добавить туда знаковые типы и прочее прочее.