Prolog中的关联列表

时间:2018-04-27 20:31:04

标签: list dictionary prolog predicate associative

我的任务是用列表实现地图。我们定义了关联列表如下:

[]是列表, k是密钥,v是值,a是关联列表,然后[[k, v] | a]是关联列表。

所以现在我必须编写一个谓词,在其中它检查给定的参数是否是一个关联列表。 例如:

?- test([[a,5]]). -> true., ?- test([[1],[2]]). -> false.
我真的很绝望,我希望有人可以帮助我

问候

1 个答案:

答案 0 :(得分:1)

我可以说associative lists in SWI-Prolog是作为AVL树实现的,而不是虚线对的列表,尽管后者是可能的。

所以,让我们试试你的方式。

  

[]是列表,k是键,v是值,a是关联列表,然后[[k,v] | a]是一个关联列表。

一次更正:

我建议[[ k | v ] | a]更紧凑,更“联想”)

is_assoc([]).
is_assoc([[K|V] | AL]) :- %corrected 29 apr 2018 19:00 gmt+3
    !, is_assoc( AL ).


put(KV, AL, AL0) :-
   KV = [K|V],
   get(K, AL, V),
   remove(KV, AL, AL_KV),
   put(KV, AL_KV, AL0).

put(KV, AL, [KV | AL]).

get(K, AL, V):-
   member([K|V], AL).