【发布时间】:2019-04-22 22:50:12
【问题描述】:
所以我必须实现一个 ADT,在本例中是一个 SWI-Prolog 中的哈希表。 我需要帮助,因为我是这种编程语言的新手,不知道如何开始。
这开始是在 python(3) 中的一个实现,我在其中定义了一个类并添加了要使用的函数(add、is_empty?、delete、rehash、hash 等)。 但是现在,我需要在 prolog 中做一些类似的事情。
我访问过其他一些与我类似的stackoverflow问题,但我仍然无能为力。
我希望定义一个基本的哈希表,并能够添加键+值数据和其他一些基本功能。我不太确定这是否已经在其他地方实施。 请帮忙。
【问题讨论】:
-
@GuyCoder 这听起来是个非常糟糕的主意。它与哈希表相反。
-
在缺乏破坏性赋值和直接内存操作的语言中,通常使用平衡树来实现键值映射而不是哈希表。像
setarg/3这样的语言操作通常是危险的,或者至少是不标准的。平衡树与哈希表具有不同的时间和空间复杂性,但真正的哈希表通常会破坏单赋值变量的持久性,如果它们不这样做,您通常不会获得您认为获得的性能属性。 -
@DanielLyons 当然可以。看我的回答。它将具有您期望的哈希映射的属性。
setarg/3是可回溯的,所以它没有你说的那么糟糕。绝对比断言和收回更好,即使这会给你一个真正的哈希表。在 Prolog 中很容易为哈希映射数据结构提出特定的用例。这里真正的问题是我们还没有用例,因此不可能特别讨论任何方法的优缺点。
标签: python prolog swi-prolog abstract-data-type