在ACL2中排序的地图

时间:2014-11-10 11:50:54

标签: indexing acl2

我必须在ACL2中使用排序映射/索引结构。目前我有以下内容:

( (key1 . (val1 val2)) (key2 . (val3)) (key3 . (val4 val5 val6)) )

还有其他方法可以更有效地做到这一点吗?

1 个答案:

答案 0 :(得分:0)

从你的例子来看,我并不清楚你要做什么。

您当然可以在关联列表上定义操作,使其按键排序顺序。在那种情况下:

  • 您的get函数看起来就像是acons
  • 您的put函数需要查找"右键"放置元素的地方。

但这并不是特别有效。两个操作都是O(n)。此外,作为一个实际考虑,put操作将需要O(n)个,这是特别昂贵的,因为cons分配内存。

通常最好只使用普通的关联列表,即使用aconsassoc。主要的优点是,因为它只是将新的键/值对汇集到列表的前面,acons是O(1),所以构造映射通常要便宜得多。如果需要,您可以随时对alist的键进行排序,例如,使用set::mergesort或某些自定义排序功能。

访问alists仍然是O(n)。但是,fast-alists在ACL2(h)中可用,并且基本上提供了一种获取哈希表速度的方法。另请参阅std/alists的文档。