Prolog 中的关联列表

Associative Lists in Prolog

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

[] 是列表, k是键,v是值,a是关联列表,那么[[k, v] | a]是关联列表。

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

?- test([[a,5]]). -> true., ?- test([[1],[2]]). -> false.

我真的很绝望,我希望有人能帮助我

问候

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

那么,让我们试试你的方法吧。

[] is the list, k is a key, v is a value and a is an associative list, then [[k, v] | a] is an associative list.

一次更正:

我建议 [[ k | v ] | a] 更紧凑 "more associative" )

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).