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

时间:2011-01-26 03:54:54

标签: function idempotent pure-function

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

他们是等同的吗?

7 个答案:

答案 0 :(得分:52)

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

纯粹的功能不能。

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

答案 1 :(得分:14)

函数是一个没有副作用的函数,其中输出由输入决定 - 也就是说,调用f(x)会给出相同的效果无论你多少次打电话都会得到结果。

幂等函数可以在不更改结果的情况下多次应用 - 即f(f(x))f(x)相同。

一个函数可以是纯函数,幂等函数,两者都可以。或者两者都没有。

答案 2 :(得分:4)

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

每个纯函数都是副作用幂等因素,因为纯函数永远不会产生副作用,即使它们被多次调用也是如此。但是,返回值幂等意味着f(f(x))= f(x)不受纯度的影响。

答案 3 :(得分:3)

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

答案 4 :(得分:2)

混淆的一个重要原因是,在计算机科学中,在命令式和函数式编程中似乎存在不同的幂等定义。

来自维基百科(https://en.wikipedia.org/wiki/Idempotence#Computer_science_meaning

  

在计算机科学中,术语“幂等”被更全面地用于描述如果执行一次或多次将产生相同结果的操作。这可能具有不同的含义,具体取决于应用它的上下文。例如,在具有副作用的方法或子程序调用的情况下,这意味着在第一次调用之后修改的状态保持不变。但是在函数式编程中,幂等函数是对任何值x都具有属性f(f(x))= f(x)的函数。

由于纯粹的功能不会产生副作用,我认为幂等与纯度无关。

答案 5 :(得分:0)

我发现有更多地方将“幂等”定义为f(f(x)) = f(x),但我真的不认为那是正确的。 相反,我认为此定义更准确(但不完全是):

描述一个动作,在同一动作上执行多次 主题,第一次后对其主题没有进一步影响 被执行。投影算子是幂等的。

如果我们对f(主题)应用x两次,我的解释方式是:

f(x); f(x);

然后,(副作用)与

相同

f(x);

由于纯函数不允许产生副作用,因此纯函数通常也是“等幂的”。


idempotent的更一般(更准确)的定义还包括

之类的功能。

切换(x)

我们可以说切换的degree的{​​{1}}是2,因为每两次应用idempotency之后,我们总是得到相同的toggle

答案 6 :(得分:-1)

纯函数= 幂等 +输入变量没有变化。

相关问题