art*_*lla 6 haskell immutability purely-functional
Haskell中的纯函数是否有可能改变变量的局部副本,就像在函数式编程是一个骗局中提到的那样.大卫·诺伦?如果不是这样的原因是什么原因,如果有的话,有没有人能指出我的例子?
类似的问题在函数中被问到,这些函数看起来对调用者来说是纯粹的,但在内部使用变异,并且普遍的共识似乎是纯函数执行变异是可行的,只要突变是在变量的局部副本上执行的(即效果)突变不会逃避功能并具有非局部效应).
问题出现了,当我翻译成沉冒泡排序(局部突变,全球突变,可变数据结构,冒泡齐),这并没有发生变异的名单,以共同Lisp和相比,在冒泡Common Lisp中冒泡,这确实发生变异列表.结果是我发现(在Common Lisp中)对于非常大的列表而言,变异列表的版本明显比没有变异列表的版本快得多.
Tho*_*son 11
该ST单子正是为可变操作的纯代码中的安全嵌入.利用类型系统来确保没有任何变异数据可以逃避范围,因此您可以获得本地可变状态的强大功能,而不会使整个程序处于有状态(这可能会破坏参照透明度或引入竞争条件).
关于ST monad的一些文档:
vsort.| 归档时间: |
|
| 查看次数: |
594 次 |
| 最近记录: |