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

StackOverflow https://stackoverflow.com/questions/4801282

Вопрос

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

Они эквивалентны?

Это было полезно?

Решение

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

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

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

Другие советы

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

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

Функция может быть чистой, идентифицирующей, оба, или ни один.

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

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

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

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

Из Википедии (https://en.wikipedia.org/wiki/idempotence#computer_science_meaning)

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top