函数式编程:不可变的数据结构效率

时间:2009-11-02 00:21:45

标签: functional-programming

我不明白,FP编译器如何使代码快速处理不可变数据结构,而不是炸毁堆栈等。

例如,在树中插入操作,它必须在添加新节点之前复制整个树并返回复制的树,而不是仅需要添加指向新节点的命令式couterpart。如果插入操作运行数百万次,则需要占用大量内存,并且当树更大时,复制将越来越慢。 FP编译器如何实际优化它?

4 个答案:

答案 0 :(得分:16)

您无需复制整棵树进行更改;你可以分享大部分结构。参见例如Rich Hickey在Clojure上的this blogthis talk中的图表(请参阅有关哈希尝试的讨论)。

答案 1 :(得分:7)

编译器不会真正优化它,这是你必须在编码时专门编程的东西。执行此操作的技巧在优秀的纯功能数据结构(bookthesis)中进行了解释。

答案 2 :(得分:1)

答案 3 :(得分:-4)

如果垃圾收集器正在执行其工作,则数据结构的旧副本将在不再使用时回收。