Prolog-Grundzüge 5: Rekursion

July 21, 2009 at 4:47 pm Leave a comment


In Prolog gibt es keine Schleifenkonstrukte wie FOR oder WHILE im klassischen Sinne. Stattdessen wird Rekursion verwendet. Häufig trifft man Rekursion in Prolog im Zusammenhang mit Listen an.

Wollen wir beispielsweise alle Elemente einer Liste ausgeben, so können wir dies durch folgende Regeln erreichen:

schreibe_liste([]).
schreibe_liste([H|T] :- write(H), write(','), schreibe_liste(T).

Diese Definition liest sich so: Wenn wir eine leere Liste haben, schreiben wir nichts. Ansonsten schreiben wir das erste Element, gefolgt von einem Zeilenumbruch “nl” und schreiben den Rest der Liste.

Durch die Definition von “schreibe_liste([])” haben wir die Abbruchbedingung für die Rekursion definiert. Hätte man diese Definition weggelassen, würde die Ausgabe immer noch korrekt erfolgen, “schreibe_liste” würde aber immer “false” liefern – weil die rekursive Regelanwendung irgendwann bei der leeren Liste ankommen würde, die sich nicht weiter aufsplitten lässt. Bei anderen Definitionen kann das Weglassen der Abbruchregel leicht zu Endlosrekursionen führen.

Entry filed under: 1. Tags: .

Prolog-Grundzüge 4: Pattern Matching Prolog-Grundzüge 6: Fail

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

Trackback this post  |  Subscribe to the comments via RSS Feed



%d bloggers like this: