参考透明度是什么意思?我曾听人描述它为“这意味着你可以用等号替换等号”,但这似乎是一个不充分的解释。
当前回答
引用透明性是函数式编程中常用的术语,它意味着给定一个函数和一个输入值,您将始终收到相同的输出。也就是说,函数中没有使用外部状态。
下面是一个引用透明函数的例子:
int plusOne(int x)
{
return x+1;
}
对于引用透明函数,给定一个输入和一个函数,您可以用一个值替换它,而不是调用函数。所以我们不用参数5来调用+ one,我们可以用6来代替它。
另一个很好的例子是一般的数学。在数学中,给定一个函数和一个输入值,它总是映射到相同的输出值。F (x) = x + 1。因此,数学中的函数是指透明的。
这个概念对研究人员来说很重要,因为它意味着当您拥有一个引用透明的函数时,它有助于实现简单的自动并行化和缓存。
引用透明性总是用在像Haskell这样的函数式语言中。
--
与之相反的是参照不透明的概念。这句话的意思正好相反。调用该函数可能并不总是产生相同的输出。
//global G
int G = 10;
int plusG(int x)
{//G can be modified externally returning different values.
return x + G;
}
另一个例子是面向对象编程语言中的成员函数。成员函数通常对其成员变量进行操作,因此是引用不透明的。成员函数当然可以是引用透明的。
还有一个例子是从文本文件中读取并打印输出的函数。这个外部文本文件可以随时更改,因此该函数将是引用不透明的。
其他回答
参考透明度是计算机科学中使用的一个术语。它起源于数学逻辑,但在计算机科学中具有广泛的应用和有效的含义。
它的意思是:可以被其结果替换而不改变其含义的结构(如函数)。
在通常使用中,它与纯表达式相似,但并不完全等效。纯表达式完全由其他纯表达式组成。引用透明表达式可能在内部是不纯的,例如在其计算过程中使用可变状态,但在表达式整体之外没有副作用。
所有纯函数,根据它们的构造,都是指涉透明的,但不一定相反。
许多语言特性都支持不纯引用透明性,比如Haskell中的ST单表,c++中的构造变量和某些lambdas。
有时引用透明性是强制的,而其他时候程序员必须自己保证它。
引用透明函数的作用类似于数学函数;给定相同的输入,它总是会产生相同的输出。它意味着传入的状态没有被修改,并且函数本身没有状态。
请注意,这个“意义”的概念是发生在观察者头脑中的事情。因此,同样的“参考”对不同的人可能意味着不同的事情。例如,我们在维基百科上有一个爱丁堡消歧页面。
在编程上下文中出现的一个相关问题可能是多态性。
也许我们应该为特殊情况下的多态(或者甚至是强制转换)取一个名字,其中不同的多态情况在语义上是等价的(而不是完全相似)。例如,数字1——可以用整数类型、复杂类型或任何其他类型表示——可以用多态方式处理)。
引用透明函数是只依赖于其输入的函数。
表示性语义是建立在建模语言的基础上,通过构建域来构成可表示性值。 函数式程序员使用术语值来描述基于语言重写规则的计算的收敛性。它的操作语义。
在1中,有两种语言的清晰度:
被建模的那个,目标语言 建模的语言,元语言
2、由于对象和元语言的紧密性,它们可能会被混淆。
作为一名语言实现者,我发现我需要经常记住这个区别。
所以Reddy教授,我可以这样解释你吗?
在函数式编程和语义的上下文中,术语引用 透明度不是指的透明。
推荐文章
- 大的Ө符号到底代表什么?
- 在Scala中,foldLeft和reducleft的区别
- Java SE 8有对或元组吗?
- 一个字符串的字符串列表
- 对于没有null的语言的最佳解释
- Python:为什么functools。部分有必要吗?
- 如何用动态规划确定最长递增子序列?
- 我如何用groupBy计算发生的事件?
- foreach和map有区别吗?
- 在函数式编程中,什么是函子?
- PHP中接口的意义是什么?
- 面向对象编程,函数式编程,过程式编程
- 什么是“P=NP?”,为什么这是一个如此著名的问题?
- 为什么不可变性在JavaScript中如此重要(或需要)?
- 如何使用underscore.js作为模板引擎?