【问题标题】:What is a difference between definitions reference transparency and deterministic function?定义参考透明度和确定性函数之间有什么区别?
【发布时间】:2016-04-24 00:12:32
【问题描述】:

参考透明度 (Wikipedia):

如果表达式可以是引用透明的,则称其为引用透明的 替换为它的值而不改变程序的行为(在 换句话说,产生一个具有相同效果和输出的程序 在相同的输入上)。

还有(Learn you some Erlang):

函数总是为相同的参数返回相同的结果是 称为参照透明

确定性函数 (MSDN):

确定性函数在任何时候都返回相同的结果 使用一组特定的输入值调用。

如果我们在谈论确定性函数,是指参照透明性?如果我们在谈论引用透明性,我们的意思是确定性函数?

【问题讨论】:

标签: functional-programming computer-science


【解决方案1】:

请注意,您对引用透明度的定义特别提到了“在相同输入上的相同效果和输出”。如果您的表达式包含效果,例如 I/O,那么它可以是引用透明的,而不是确定性的(两者都如上定义)。

另一方面,纯函数式编程专注于没有效果的函数,它可以是可靠的确定性的。确定性函数必然是引用透明的,但反之则不然。

考虑区分“效果”和“副作用”,“效果”是编写程序的重要和必要的工作,“副作用”可能会发生对调用者不明显的效果。这种不透明性(与引用透明性相反)是难以推理您正在调用的代码的原因。

【讨论】:

    【解决方案2】:

    表达式可能比简单的函数调用更复杂,因此“引用透明”适用于比“确定性”更大的实体类。当应用于函数时,它们基本相同,因为函数应用程序是引用透明的当且仅当它是确定性的。由确定性函数构建的表达式将是引用透明的,尽管它也可能具有引用透明的表达式,即使它的某些成分是非确定性的(0*rand() 是一个愚蠢的例子,尽管有一些不太愚蠢的例子随机种子用于获得确定性答案)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-25
      • 2017-06-29
      • 2010-11-27
      相关资源
      最近更新 更多