这些术语的定义似乎确实 不同,但我一直认为一个暗示另一个;我想不出任何情况下表达式是引用透明但不纯的,反之亦然。
维基百科为这些概念维护了单独的文章,并说:
从参考透明度:
如果表达式中涉及的所有函数都是纯函数,则表达式是引用透明的。此外,如果某些不纯函数的值被丢弃并且它们的副作用微不足道,则可以将它们包含在表达式中。
从纯表达式:
纯函数是构造纯表达式所必需的。[...] 纯表达式通常被称为引用透明的。
我发现这些陈述令人困惑。如果所谓的“不纯函数”的副作用微不足道,以至于不允许在不实质性更改程序的情况下不执行它们(即用它的值替换对此类函数的调用),那么它就好像它是纯的一样第一,不是吗?
有没有一种更简单的方法来理解纯表达式和引用透明表达式之间的区别(如果有的话)?如果存在差异,将不胜感激提供一个清楚地证明它的示例表达式。