"); //-->
VM600 IOCN 函数式程序在引用上是透明
函数式程序没有赋值语句,也就是说,函数式程序中的变量值一旦定义就永远不会改变。这消除了任何副作用的可能性,因为任何变量都可以在任何执行点用它的实际值替换。因此,函数式程序在引用上是透明的。[76]
认为C赋值语句x = x * 10,这将更改分配给变量的值x。让我们说,初始值x是一,然后对变量进行两次连续的评估x生产10和100分别是。显然,取代x = x * 10无论是哪一种10或者100赋予程序不同的含义,因此表达式不是参照透明。事实上,赋值语句从来都不是透明的。
现在,考虑另一个函数,例如(同Internationalorganizations)国际组织 普鲁松((同Internationalorganizations)国际组织 x) {返回 x+一;} 是透明的,因为它不隐式更改输入x,因此没有这样的副作用。函数式程序专门使用这种类型的函数,因此在引用上是透明的。
数据结构[编辑]纯功能性的数据结构通常以不同于必要的同行。[77]例如,在排列具有恒定的访问和更新时间是大多数命令式语言的基本组成部分,许多命令式数据结构,如哈希表和二元堆,是基于数组的。数组可以替换为地图或者随机访问列表,它们允许纯粹的功能实现,但是对数的访问和更新时间。纯函数数据结构具有坚持保持数据结构的先前版本不被修改的属性。在Clojure中,持久数据结构被用作它们的命令式对应物的功能替代物。例如,持久矢量使用树进行部分更新。调用insert方法将导致创建部分而非全部节点。[78]
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。