幂等函数是否与纯函数相同?

Lai*_*uan 56 function idempotent pure-function

我读了维基百科对幂等性的解释.我知道这意味着函数的输出是由它的输入决定的.但我记得我听过一个非常相似的概念:纯粹的功能.我谷歌他们但找不到他们的区别......

它们是等价的吗?

SLa*_*aks 56

幂等函数可能导致幂等副作用.

一个纯粹的功能不能.

例如,设置文本框文本的函数是幂等的(因为多个调用将显示相同的文本),但不是纯粹的.
类似地,通过GUID(而不是按计数)删除记录是幂等的,因为在后续调用之后该行保持删除.(其他电话什么都不做)

  • 删除是幂等的,只要在删除失败时没有遇到错误 - 一个应用程序之后的世界状态与2之后相同 - 该行已被删除 - 并且只要世界状态和结果是同样在n> = 1之后调用1次调用后,根据定义,它是幂等的.然而,如果它抱怨那么它不是例如它是否在错误时打印到stderr. (5认同)

Ano*_*on. 17

一个纯粹的功能是没有地方输出副作用的功能完全由输入确定的-也就是说,调用f(x)会产生相同的结果,不管你有多少次调用它.

幂等函数是一个可以在不改变结果来多次应用-即,f(f(x))是一样的f(x).

函数可以是纯函数,幂等函数,两者都可以.

  • @SLaks:不对.`f(x)= x + 1`不是幂等的,因为`f(f(1))!= f(1)`. (18认同)
  • 但纯函数_must_是幂等的. (8认同)
  • @ user590083:不,他的解释在计算领域是有效的.但是,在Anon的答案中,改变的计算状态是输出的一部分. (3认同)
  • @nilskp 纯度是与幂等不同的概念;您似乎误解了它的定义。幂等性意味着操作或函数的附加连续组合(在第一个函数应用程序的输出上)不会给出不同的输出,即 f(x) = f(f(x)) = f(f(f(x)) )) = ...等等。纯度意味着相同的输入(不是任何先前应用程序的输出)将给出相同的输出,无论时间或外部世界的状态如何。 (2认同)
  • @nilskp在命令式编程语言中,由对f(x)的调用组成的语句是对假设函数(不是f)的调用,该函数以“世界状态”作为输入,并在调用返回时输出不同的状态。如果在第一个之后对f(x)的进一步调用没有任何改变,则f(x)也可以称为幂等。 (2认同)

Bre*_*ias 8

不,幂等函数将更改程序/对象/机器状态 - 并且只会进行一次更改(尽管重复调用)。纯函数什么都不改变,每次被调用时都会继续提供(返回)结果。


小智 6

功能纯度意味着没有副作用。另一方面,幂等性意味着函数对于多次调用是不变的。

每个纯函数都是副作用幂等的,因为纯函数即使被多次调用也不会产生副作用。然而,返回值幂等性意味着 f(f(x)) = f(x) 不受纯度影响。