【发布时间】:2013-10-21 03:33:22
【问题描述】:
Haskell 中的纯函数是否可以像 David Nolen 在 Functional Programming Is A Scam! 中提到的那样,改变变量的本地副本?如果不是,这是什么原因,如果是的话,有没有人可以指出我的例子?
在Functions that look pure to callers but internally use mutation 中提出了一个类似的问题,并且普遍的共识似乎是纯函数执行突变是可以的,只要突变是在变量的本地副本上执行的(即突变的效果确实不转义函数并具有非局部效果)。
当我将 Shen (Local mutation, global mutation, mutable datastructures, Bubblesort in Qi) 中的冒泡排序(Local mutation, global mutation, mutable datastructures, Bubblesort in Qi) 翻译为 common lisp 并与 Bubblesort in Common Lisp 中的冒泡排序进行比较时,问题出现了,它确实改变了列表。结果是我发现(在 Common Lisp 中)改变列表的版本比没有改变列表的版本快得多,对于非常大的列表。
【问题讨论】:
标签: haskell immutability purely-functional