在prolog中表示二维数组的最有效方法是什么?我想到了一个长列表或列表列表,但它们具有线性访问时间,这似乎对我的问题来说太慢了。我不一定在寻找一个现成的解决方案,而是一个如何实现它的概念。
答案 0 :(得分:4)
您可以使用AVL树或红黑树获得对数时间访问,请参阅SWI和YAP中的库(assoc)和库(rbtree)。对于持续时间访问,使用N个参数创建一个术语,并使用arg / 3进行高效访问。这些参数中的每一个都可以再次成为具有arity N的术语,因此您拥有一个具有高效读取访问权限的数组。使用setarg / 3,您甚至可以破坏性地修改元素,但代价是丢失了良好的逻辑属性以及更加痛苦的调试和测试。在许多情况下,您可以将算法重新构造为不需要随机访问,并使用列表列表。如果无法做到这一点,AVL或其他平衡树通常是一个非常好的选择。