В обсуждении Конечный автомат на ПР200 тов anthrwpos выссказал мысль, что
Мысль занятная, но к сожалению неправильная с точки зрения классической теории программирования.
Во-первых, Wikipedia:
В английской статье:Сообщение от Wikipedia
Иными словами, тут тоже говорится, что "если есть побочные эффекты, то результат может зависеть от истории выполнений".Сообщение от Wikipedia
Апофеозом выступает такое сообщение:
И это при том, что чистая функция это
Очевидно, что blink возвращает разные значения, несмотря на то, что значения на входе не изменяются. Blink выдаёт то нолик, то единичку. Значение изменилось? Да. Агрументы запуска blink меняли? Нет. Всё -- это недетерминированность функции.Сообщение от Wikipedia
Значит ли это, что "blink ущербная функция"? Едва ли. Просто с точки зрения computer science, blink не является чистой функцией.
В конце концов, anthrwpos выдал такое заключение:
Я, конечно, соглашусь, что считать Wikipedia "основой основ" неправильно, но, если в Wikipedia написано "странное", то стоит перепроверить _свою_ позицию.
Вот откуда такая уверенность, что все авторы на Wikipedia ошиблись (и в русской и в английской версии статьи)?
Внимание, вопрос:
На этом, вопрос к тов. anthrwpos: приведите, пожалуйста, пример недетерминированной функции. Раз утверждаете, что ОЛ макрос это "детерминированная функция без побочных эффектов", и считаете, что "развертка по времени это тоже простой аргумент" то приведите пример недетерминированной функции.
Поясню к чему я веду: в подавляющем количестве случаев (почти во всех), выходное значение функции зависит от текущих аргументов и истории прошлых запусков.
Если следовать логике "история запусков это просто аргумент", то получается, что почти все функции являются "детерминированная функция без побочных эффектов".
Очевидно, что это ересь, но давайте посмотрим как у вас получится?
Если такой вариант не устраивает, процитируйте "из учебной литературы" (ну или из оттуда, чему вы доверяете) что-нибудь, подтверждающее, что "если вызывали функцию несколько раз с одними аргументами и она вернула разные результаты, то она называется <<детерменированная без побочных эффектов>>".
Ну или процитируйте хоть что-нибудь, говорящее о том, что "развертка во времени это аргумент".
Слова "есть единое пространство-время и относительность одновременности" в контексте "чистых функций" это, простите, бред сивой кобылы. Это реально так, ведь у слова "чистая функция" есть определение, и на него пространство-время не действует.
У ФБ SET_RESET_TRIGGER(S, R) сколько аргументов? Два или бесконечное количество? Ну вот реально как вы собрались вкрячивать "развертку времени" в качестве аргумента?
Более того, сама длительность выполнения программы это тоже побочный эффект.
Приведу пример: в ОЛ длительность обычной функци fMUL наверняка зависит от входных аргументов (процессор ПР200 не умеет работать с плавающей точкой, и в Си библиотеке для этого процессора функция fMUL эмулируется). Поэтому, если совсем строго говорить, то ОЛ макрос уж точно с побочными эффектами.
Да, длительность выполнения важна в какой-нибудь безопасности, поэтому сейчас длительностью можно пренебречь. Но я привожу длительность тут для того, чтобы вы хоть как-то задумались над тем, что на самом деле в классической литературе по программированию принято называть словом "побочный эффект".
PS. Пункт 4.г правил я видел, но считаю, что тема интересна не только одному anthrwpos.