Могу сказать, что ассоциативные списки в SWI-Prolog реализованы как AVL-деревья, а не как списки из пунктирных пар, хотя последнее возможно.
Итак, попробуем.
[] это список, k это ключ, v это значение и a это ассоциативный список, тогда [[k, v] | а] является ассоциативным списком.
Одна поправка:
Я бы предложил [[ 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).