参考透明度是什么意思?我曾听人描述它为“这意味着你可以用等号替换等号”,但这似乎是一个不充分的解释。
当前回答
请注意,这个“意义”的概念是发生在观察者头脑中的事情。因此,同样的“参考”对不同的人可能意味着不同的事情。例如,我们在维基百科上有一个爱丁堡消歧页面。
在编程上下文中出现的一个相关问题可能是多态性。
也许我们应该为特殊情况下的多态(或者甚至是强制转换)取一个名字,其中不同的多态情况在语义上是等价的(而不是完全相似)。例如,数字1——可以用整数类型、复杂类型或任何其他类型表示——可以用多态方式处理)。
其他回答
表示性语义是建立在建模语言的基础上,通过构建域来构成可表示性值。 函数式程序员使用术语值来描述基于语言重写规则的计算的收敛性。它的操作语义。
在1中,有两种语言的清晰度:
被建模的那个,目标语言 建模的语言,元语言
2、由于对象和元语言的紧密性,它们可能会被混淆。
作为一名语言实现者,我发现我需要经常记住这个区别。
所以Reddy教授,我可以这样解释你吗?
在函数式编程和语义的上下文中,术语引用 透明度不是指的透明。
对于那些需要简明解释的人,我将冒险给出一个解释(但请阅读下面的披露)。
编程语言中的引用透明性促进了等式推理——您拥有的引用透明性越多,就越容易进行等式推理。例如,使用(伪)函数定义,
F x = x + x,
在这个定义的范围内,您可以(安全地)将f(foo)替换为foo + foo,而不会对在哪里执行此简化有太多限制,这很好地说明了您的编程语言具有多大的引用透明性。
例如,在C编程的意义上,如果foo是x++,那么你就不能安全地执行这个约简(也就是说,如果你要执行这个约简,你最终得到的程序将与你开始时的程序不同)。
在实际的编程语言中,你不会看到完美的引用透明性,但函数式程序员比大多数人更关心它(参考Haskell,它是一个核心目标)。
(完全披露:我是一个函数式程序员,所以从上面的答案你应该对这个解释持保留态度。)
引用透明性可以简单地表述为:
一个表达式在任何上下文中总是求相同的结果[1], 一个函数,如果给定相同的参数两次,必须产生相同的结果两次。
例如,编程语言Haskell是一种纯函数式语言;这意味着它是引用透明的。
参考透明度是计算机科学中使用的一个术语。它起源于数学逻辑,但在计算机科学中具有广泛的应用和有效的含义。
它的意思是:可以被其结果替换而不改变其含义的结构(如函数)。
在通常使用中,它与纯表达式相似,但并不完全等效。纯表达式完全由其他纯表达式组成。引用透明表达式可能在内部是不纯的,例如在其计算过程中使用可变状态,但在表达式整体之外没有副作用。
所有纯函数,根据它们的构造,都是指涉透明的,但不一定相反。
许多语言特性都支持不纯引用透明性,比如Haskell中的ST单表,c++中的构造变量和某些lambdas。
有时引用透明性是强制的,而其他时候程序员必须自己保证它。
请注意,这个“意义”的概念是发生在观察者头脑中的事情。因此,同样的“参考”对不同的人可能意味着不同的事情。例如,我们在维基百科上有一个爱丁堡消歧页面。
在编程上下文中出现的一个相关问题可能是多态性。
也许我们应该为特殊情况下的多态(或者甚至是强制转换)取一个名字,其中不同的多态情况在语义上是等价的(而不是完全相似)。例如,数字1——可以用整数类型、复杂类型或任何其他类型表示——可以用多态方式处理)。