【发布时间】:2023-03-04 10:26:01
【问题描述】:
我知道,在惰性函数式语言中,链表采用生成器式语义,并且在优化编译器下,当它们实际上不用于存储时,它们的开销可以完全消除。
但是在热切的函数式语言中,它们的使用似乎同样繁重,而优化它们似乎更加困难。像 Scheme 这样的语言在平面数组上使用它们作为主要序列表示是否有很好的性能原因?
我知道使用单链表会带来明显的时间复杂度影响;我更多地考虑使用急切的单链表作为主要序列表示的实际性能后果,考虑了编译器优化。
【问题讨论】:
-
1) 简单 2) 琐碎的 O(1) 前置 3) 共享
-
@Bergi 简单并不是真正的“性能”优势,但它是一个原因。不过,我不太确定我是否理解您的分享观点。假设不变性,您可以轻松共享平面数组。
-
但您不能共享部分数组。列表可以共享它们的尾巴。
-
@Bergi 共享是否发生在急切的语言环境中?我想你可以手动完成。
-
@DavidYoung 我的意思不是共享惰性计算,而是共享数据结构组件。我猜这在每一种具有不可变数据结构的语言中都是如此,无论是懒惰还是渴望。
标签: performance haskell linked-list functional-programming scheme