language-agnostic - 纯度与引用透明度

标签 language-agnostic functional-programming side-effects referential-transparency purely-functional

这些术语的定义似乎确实不同,但我一直认为其中一个暗示另一个;我无法想到表达式是引用透明但不纯粹的任何情况,反之亦然。

维基百科为这些概念维护单独的文章,并表示:

来自Referential transparency :

If all functions involved in the expression are pure functions, then the expression is referentially transparent. Also, some impure functions can be included in the expression if their values are discarded and their side effects are insignificant.

来自Pure expressions :

Pure functions are required to construct pure expressions. [...] Pure expressions are often referred to as being referentially transparent.

我发现这些陈述令人困惑。如果所谓的“不纯函数”的副作用微不足道足以允许不执行它们(即用其替换对此类函数的调用)而无需实质上改变程序,就和本来是纯粹的一样,不是吗?

是否有一种更简单的方法来理解纯表达式和引用透明表达式之间的差异(如果有)?如果存在差异,我们将不胜感激,提供清楚说明差异的示例表达式。

最佳答案

如果我将我认识的任何三位理论家聚集在一个地方,其中至少有两位不同意“参照透明度”一词的含义。当我还是个年轻的学生时,我的一位导师给了我一篇论文,解释说即使你只考虑专业文献,“参照透明”一词也至少用来表示三种不同的含义。 (不幸的是,那篇论文在一箱重印本中,尚未扫描。我在 Google Scholar 中搜索了它,但没有成功。)

我无法通知你,但我可以建议你放弃:因为即使是一小群尖刻的语言理论家也无法就“参照透明”一词的含义达成一致没有用。所以不要使用它。

<小时/>

附注在任何与编程语言语义有关的主题上,维基百科都是不可靠的。我已经放弃尝试修复它了;维基百科的流程似乎更重视变化和民众投票而不是稳定性和准确性。

关于language-agnostic - 纯度与引用透明度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4865616/

相关文章:

scala - 为抛出异常的函数评估 bool 值的函数方法

java - 构建hibernate实体时如何处理双向关系?

math - float 学有问题吗?

objective-c - 闲聊和 ObjectiveC 中的消息传递是否与参数中具有值类型(结构)的调用方法相同?

language-agnostic - 项目与领域知识匹配

scripting - 有没有使用函数式编程的体面脚本语言?

javascript - 在对象中的多个数组上使用映射和过滤器

algorithm - Wa-Tor 就像元胞自动机。应该按什么顺序更新单元格?

vue.js - 简单的 Vue.js 计算属性说明

javascript - 如何修复 vue/计算属性中的无副作用?