Comments 16
Чистые функции, хороши тем, что их можно вычислять в любом порядке(или вообще не вычислять, если не надо). Ваши же «детерминированные фунции» требуют строгого и последовательного вычисления, иначе в консоли вместо «Hello, world!» появится «world! Hello,» или вообще «world!».
+3
То есть, любая чистая функция ассоциативна?
0
Меня, видимо, неправильно поняли. Я говорю, что если у нас есть несколько вызовов чистых функций, то их можно выполнить в любом порядке, т.е., например, при вычислении
Если функции Clean1..3 чистые, ты мы сначала можем вычислить Clean2(arg2), потом Clean3(arg3), а Clean1(arg1) вообще не вычислять, т.к. в SomeFunction это значение не понадобилось. А если Clean1..3 печатают что-то в консоль, то может получиться «world! Hello,».
SomeFunction(Clean1(arg1), Clean2(arg2), Clean3(arg3));
Если функции Clean1..3 чистые, ты мы сначала можем вычислить Clean2(arg2), потом Clean3(arg3), а Clean1(arg1) вообще не вычислять, т.к. в SomeFunction это значение не понадобилось. А если Clean1..3 печатают что-то в консоль, то может получиться «world! Hello,».
+12
Скорее, коммутативна.
0
По мере возможности пвытаюсь делать функции чистыми, однако это не всегда возможно, должны же быть функции, клоторые выводят данные в какой-то поток, или берут их из него. По мпте.матическому определению функия никак не взаимодействует с внешним миром. Все остальные «функции», насколько я знаю, называются процедураами.
Но я ттак и не понял почему автор ошибался, разьве что не совсем точно дал опре, деление.
Но я ттак и не понял почему автор ошибался, разьве что не совсем точно дал опре, деление.
0
Я не пишу это в личку, потому что следующее утверждение — вопрос на обсуждение.
В оригинале звучит так: «Детерминированные фунуции также могут не использовать внешнее состояние, т.к. это может влиять на их выполнение. Но большинство определений детерминированных функций просто утверждает, что вы можете определить их результат на основе входных данных».
Детерминированные функции так же не могут использовать внешнее состояние, потому что оно повлияет на их функционирование. Большинство определений детерминированных функций говорит, что вы можете определить результат по входным данным.
В оригинале звучит так: «Детерминированные фунуции также могут не использовать внешнее состояние, т.к. это может влиять на их выполнение. Но большинство определений детерминированных функций просто утверждает, что вы можете определить их результат на основе входных данных».
+1
И это все?
+12
Функция вывода на консоль не будет детерминированной. Взять к примеру случай, когда консоль вдруг становится недоступна (а такое бывает, если например это какое-то терминальное устройство) и мы получаем исключение. В случае «нечистых» функций таких «если», может быть порядочно, чтобы с уверенностью заявить, что функции не являются детерминированными.
+2
В соответствии с подобными рассуждениями ни одна функция не может считаться детерминированной, поскольку всегда есть вероятность того, что закончится память или сыграют роль еще какие-нибудь внешние по отношению к функции факторы. Дело в том, что понятие «чистота» относится к функции как к программной реализации алгоритма, а понятие детерминированности к самому алгоритму.
+3
«Подвизоки»… Подвысоцкий же!
+2
А мне вот не совсем понятно, как быть с логированием. С одной стороны -= оно что-то куда-то пишет. А с другой — никак не влияет на логику работы системы. Я, конечно, понимаю что бага в коде логирования может вызвать падение всей системы, но то же самое можно сказать о любом методе, который мы вызываем.
0
Sign up to leave a comment.
Чистые и детерминированные функции