Haskell 中的纯函数是否有可能改变变量的本地副本,就像函数式编程是一个骗局中提到的 clojure 一样!,大卫·诺伦?如果不是,这是什么原因,如果是的话,有没有人可以指出我的例子?
在对调用者来说看起来很纯粹但内部使用突变的函数中提出了一个类似的问题,并且普遍的共识似乎是纯函数执行突变是可以的,只要突变是在变量的本地副本上执行的(即效果的突变不会逃避功能并具有非局部影响)。
当我将 Shen 中的冒泡排序(Local mutation, global mutation, mutable datastructures , Bubblesort in Qi)翻译为 common lisp 并与Common Lisp 中 Bubblesort 中的冒泡排序进行比较时,问题出现了,后者确实发生了变异名单。结果是我发现(在 Common Lisp 中),对于非常大的列表,改变列表的版本比没有改变列表的版本快得多。