Prolog-Grundzüge 4: Pattern Matching

Juli 20, 2009 at 8:09 nachmittags Hinterlasse einen Kommentar


Eine weiteres sehr nützliches Prolog-Feature ist das Pattern-Matching. In den meisten Programmiersprachen wird zur Auswahl einer Funktion oder Prozedur nur der Name herangezogen, bei Java und Konsorten auch noch die Anzahl und der statische Typ der Parameter. Bei Prolog wird außerdem die Form der Argumente herangezogen.

So kann man in einer Regeldefinition z.B. den Split-Operator für Listen (den wir im letzten Blogeintrag kennen gelernt haben) verwenden und sowas schreiben:

liste([H,T], H, T) :- true. 

tut dasselbe wie die Regel “liste” aus dem letzten Blogeintrag. Dort war “liste” definiert als:

liste(EineListe, H, T) :- [H|T] = EineListe.

Wir werden beim Thema Rekursion sehen, dass es hier nicht nur darum geht, Regeln etwas kürzer aufschreiben zu können. Das Pattern-Matching ist letztlich die Voraussetzung dafür, dass sich Rekursion in Prolog überhaupt elegant benutzen lässt.

Und über das Pattern-Matching kann man benannte Parameter realisieren, ohne dass Prolog dieses Konzept direkt unterstützt:

fuelle_liste([Wert], mit:1, mal:Wert) :- !.
fuelle_liste(Liste, mit:Anzahl, mal:Wert) :- AnzahlRed is Anzahl - 1, fuelle_liste(Liste2, mit:AnzahlRed, mal:Wert), Liste = [Wert|Liste2].

So kann man jetzt die Abfrage sprechend formulieren:

?- fuelle_liste(Liste, mit:4, mal:a).

Liefert “[a, a, a, a]“. Hier sieht man außerdem eine Besonderheit von Prolog. Wenn man Berechnungen durchführt, darf man diese nicht mit = auf eine Variable zuweisen. Stattdessen muss man is verwenden. Das Ausrufezeichen ! ist übrigens der Cut-Operator. Aber um den kümmern wir uns später.

Noch eine Schmankerl zum Schluss: Regeln die immer “true” liefern, unterscheiden sich nicht von Fakten, so dass wir die Regel “liste” noch etwas kürzer schreiben können:

liste([H,T], H, T). 
About these ads

Entry filed under: 1. Tags: .

Prolog-Grundzüge 3: Listen Prolog-Grundzüge 5: Rekursion

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Verbinde mit %s

Trackback this post  |  Subscribe to the comments via RSS Feed



Follow

Bekomme jeden neuen Artikel in deinen Posteingang.

Schließe dich 172 Followern an

%d Bloggern gefällt das: