我的任务是用列表实现地图。我们定义了关联列表如下:
[]
是列表,
k
是密钥,v
是值,a是关联列表,然后[[k, v] | a]
是关联列表。
所以现在我必须编写一个谓词,在其中它检查给定的参数是否是一个关联列表。 例如:
?- test([[a,5]]). -> true., ?- test([[1],[2]]). -> false.
我真的很绝望,我希望有人可以帮助我
问候
答案 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).