SWI-Prolog bietet mithilfe der Bibliothek assoc die Möglichkeit, Dictionaries/Maps zu generieren. In diesem Artikel werden die Grundlagen gezeigt, um assoc benutzen zu können.
Laden der assoc-Library
Damit die Assoziationslisten benutzt werden können, muss die assoc Library eingebunden werden. Dafür wird folgende Zeile an den Anfang der Prolog-Datei geschrieben:
:- use_module(library(assoc)).
Erstellen einer Map
Wenn eine Assoziationsliste schrittweise erstellt werden soll, können folgende Prädikate benutzt werden: empty_assoc, put_assoc.
filledAssoc(KeyAandKeyB):- empty_assoc(Start), put_assoc(key_a,Start,value_a,StartAndKeyA), put_assoc(key_b,StartAndKeyA,value_b,KeyAandKeyB). KeyAandKeyB = t(key_a, value_a, >, t, t(key_b, value_b, -, t, t)).
Es ist auch möglich, eine Liste direkt in eine Assoziationsliste umzuwandeln. Dafür wird das folgende Prädikat benutzt: list_to_assoc.
filledAssocWithList(KeyAandKeyB):- list_to_assoc([key_a-value_a,key_b-value_b],KeyAandKeyB). KeyAandKeyB = t(key_a, value_a, >, t, t(key_b, value_b, -, t, t)).
Auslesen einer Map
Um die beiden Werte key_a und key_b von den vorherigen Beispielen wieder auszulesen, kann folgendes Prädikat benutzt werden: get_assoc
getValue(AssocList,ValueA,ValueB):- get_assoc(key_a,AssocList,ValueA), get_assoc(key_b,AssocList,ValueB). A = value_a, B = value_b.
Es ist außerdem möglich, eine Assoziationsliste wieder in eine „gewöhnliche“ Liste umzuwandeln. Dafür gibt es das Prädikat: assoc_to_list
assocToList(Assoc,List):- assoc_to_list(Assoc,List).
Quellen
http://www.swi-prolog.org/pldoc/doc_for?object=section(2,’A.3′,swi(‚/doc/Manual/assoc.html‘))