为简单起见,假设我们使用带有字符串键的映射的基元扩展lambda演算。我们添加了两项操作:set map key val
和get map key
。为了实际实现这个原语,我们可以使用持久数据结构和Haskell Data.Map
,这将给我们O(log(n))
个集合和获取。
假设我们用哈希表实现了这个结构。 get
为O(1)
,set
为O(N)
,因为它需要克隆整个哈希表。 在编译类型期间,是否可以分析所有可以安全执行就地变异的地方,将set
替换为隐藏的mset
操作? < / p>