Prolog Maps

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

 

Kommentar hinterlassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert