我读了维基百科对幂等性的解释。 我知道这意味着函数的输出是由它的输入决定的。 但我记得我听过一个非常相似的概念:纯粹的功能。 我谷歌他们但找不到他们的差异......
他们是等同的吗?
答案 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)
纯函数= 幂等 +输入变量没有变化。