Подтвердить что ты не робот

Являются ли идемпотентные функции такими же, как чистые функции?

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

Являются ли они эквивалентными?

4b9b3361

Ответ 1

Идемпотентная функция может вызывать идемпотентные побочные эффекты.

Чистая функция не может.

Например, функция, которая устанавливает текст текстового поля, является идемпотентной (поскольку несколько вызовов будут отображать один и тот же текст), но не чистые.
Аналогично, удаление записи по GUID (не по счету) является идемпотентным, поскольку строка остается удаленной после последующих вызовов. (дополнительные вызовы ничего не делают)

Ответ 2

Чистая функция - это функция без побочных эффектов, когда выход определяется исключительно входом - то есть вызов f(x) даст тот же результат независимо от того, сколько раз вы его вызываете.

Идемпотентная функция - это функция, которая может применяться многократно без изменения результата, т.е. f(f(x)) совпадает с f(x).

Функция может быть чистой, идемпотентной, и той, и другой.

Ответ 3

Нет, идемпотентная функция изменит состояние программы/объекта/машины - и сделает это изменение только один раз (несмотря на повторные вызовы). Чистая функция ничего не меняет и продолжает предоставлять результат (возврат) каждый раз, когда он вызывается.

Ответ 4

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

Всякая чистая функция - побочный эффект идемпотент, потому что чистые функции никогда не производят побочных эффектов, даже если их называют более одного раза. Однако идемпотенция возвращаемого значения означает, что f (f (x)) = f (x), которая не выполняется чистотой.

Ответ 5

Чистая функция = Идемпотент + Нет изменений входных переменных.

Ответ 6

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

Из wikipedia (https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning)

В информатике термин idempotent более полно используется для описания операции, которая будет давать одни и те же результаты, если выполняется один или несколько раз. Это может иметь другое значение в зависимости от контекста, в котором он применяется. Например, в случае методов или подпрограмм с побочными эффектами это означает, что измененное состояние остается неизменным после первого вызова. Однако в функциональном программировании функция идемпотента - это функция, которая имеет свойство f (f (x)) = f (x) для любого значения x.

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