python - SWI-Prolog 中哈希表的实现

标签 python prolog swi-prolog abstract-data-type

所以我必须实现一个 ADT,在本例中是 SWI-Prolog 中的哈希表。 我需要帮助,因为我是这种编程语言的新手,不知道如何开始。

这开始于 python(3) 中的一个实现,我在其中定义了一个类并添加了要使用的函数(add、is_empty?、delete、rehash、hash 等)。 但是现在,我需要在序言中做类似的事情。

我已经访问了其他一些与我类似的stackoverflow问题,但我仍然束手无策。

我希望定义一个基本的哈希表,并能够添加键+值数据和一些其他基本功能。我不太确定这是否已经在其他地方实现。 请帮忙。

最佳答案

几个 Prolog 系统提供了术语散列内置或库谓词。例如,SWI-Prolog 提供了 term_hash/2term_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/

相关文章:

linux - 编译的程序找不到库

python - 使用 exec 导入特定模块的优点和缺点?

python - 如何使用 python 3.2 生成(并标记)一个随机整数?

c# - 垃圾收集和作用域在 C# 中是如何工作的?

algorithm - SWI Prolog 中的 Hangman 游戏

io - 将两个文件收集到另一个文件

Prolog:传递隐式参数/谓词评估

python - Matplotlib 按 Y 值绘制散点图颜色

prolog - 如何在 Prolog 中定义新运算符?

windows-7 - 在 Windows 中使用 Prolog 代码的参数调用 exe 程序