所以我必须实现一个 ADT,在本例中是 SWI-Prolog 中的哈希表。 我需要帮助,因为我是这种编程语言的新手,不知道如何开始。
这开始于 python(3) 中的一个实现,我在其中定义了一个类并添加了要使用的函数(add、is_empty?、delete、rehash、hash 等)。 但是现在,我需要在序言中做类似的事情。
我已经访问了其他一些与我类似的stackoverflow问题,但我仍然束手无策。
我希望定义一个基本的哈希表,并能够添加键+值数据和一些其他基本功能。我不太确定这是否已经在其他地方实现。 请帮忙。
最佳答案
几个 Prolog 系统提供了术语散列内置或库谓词。例如,SWI-Prolog 提供了 term_hash/2
和 term_hash/4
内置谓词。这些谓词通常与第一个参数索引结合使用。一个简单的例子:
% dynamic predicate to hold hash table entries
% with the term hash used as first argument to
% take advantage of first-argument indexing
%
% hash_table(Hash, Term).
:- dynamic(hash_table/2).
add_hash_table_entry(Term) :-
nonvar(Term),
term_hash(Term, Hash), % or term_hash/4
assertz(hash_table(Hash, Term)).
del_hash_table_entry(Term) :-
nonvar(Term),
term_hash(Term, Hash), % or term_hash/4
retractall(hash_table(Hash, _)).
hash_table_entry(Term) :-
( var(Term) ->
hash_table(_, Term)
; term_hash(Term, Hash), % or term_hash/4
hash_table(Hash, Term)
).
关于python - SWI-Prolog 中哈希表的实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55802054/