Varianten bei der Behandlung von Listen in Prolog

Auszug aus dem Thüringer Lehrplan für das Fach Informatik an Gymnasien:

"- Listen Listenseparator
Ermitteln des ersten Elementes
Ermitteln eines beliebigen Elementes
Zusammenfügen zweier Listen
Zählen der Elemente einer Liste
(Entwerfen und Implementieren der Prädikate) ... "

Unter anderem sind folgende Varianten bei der Erarbeitung der Listenprädikate denkbar:

1. Variante:

Man hält sich an die Art, Listenprädikate zu implementieren, wie sie in verschiedenen Prolog-Büchern (u.a. Arbeitsbuch Prolog) zu finden ist. Oft wird dieser Quelltext im Lehrervortrag dargeboten oder gemeinsam mit den Schülern im Unterrichtsgespräch erarbeitet. Auch selbstständige Arbeit der Schüler ist möglich, wenn sie Literaturquellen nutzen können.

Beispiel:

element(X,[X|Ls]).
element(X,[Y|Rs]):-element(X,Rs).

Probleme:
  • Diese Art der Implementierung ist vom Quelltext her sehr komplex. Die beiden Schritte 
    1. Aufteilen der Liste in Kopf und Rest
    2. Bestimmung bzw. Suche der Elemente) 


    sind nicht klar voneinander zu trennen.

  • Schon im Regelkopf müssen die Variablenbezeichner genau überlegt sein.
Vorteil:
  • effiziente Implementierung des Prädikates
2. Variante:

Auch bei dieser Variante wird der Quelltext gemeinsam mit den Schülern erarbeitet oder im Lehrervortrag dargeboten. Andere Unterrichtsformen sind meist erst beim dritten oder vierten Listenprädikat, das behandelt wird, möglich.

Beispiel:

element(E,Liste):-Liste=[Kopf|Rest], E=Kopf.
element(E,Liste):-Liste=[Kopf|Rest], element(E,Rest).

Problem:
  • geringere Effizienz des Prädikates
Vorteile:
  • Klare Trennung der beiden Schritte
    1. Aufteilen der Liste in Kopfelement und Restliste
    2. Bestimmung bzw. Suche der Elemente
  • Meist für die Schüler leichter (besser) verständlich.
3. Variante:

Bei dieser erforschen die Schüler mit Hilfe einer Testumgebung vorgegebene Prädikate.
Das Ziel, dass die Schüler die Wirkungsweise der Prädikate verstehen und sie in anderen Prolog-Programmen richtig einsetzen können, rückt mehr in den Vordergrund. Diese Variante kommt dem Programmieren mit vorgegebenen Tools nahe.
Für die Bereitsstellung der Prädikate kann man zwischen den beiden Implementationsvarianten wie oben angegeben wählen.

Beispiel:

/*
Untersuchen Sie, was das Prädikat element/2 leistet!
Nutzen und modifizieren Sie hierzu die vorgegebenen Testprädikate test1, test2 und test3.
*/

test1:-element(2,[2,3,4,5,a,b,c,2]).
test2:-element(7,[2,3,4,5,a,b,c,2]).
test3:-element(X,[2,3,4,5,a,b,c,2]).

element(E,Liste):-Liste=[Kopf|Rest], E=Kopf.
element(E,Liste):-Liste=[Kopf|Rest], element(E,Rest).

Zwei Möglichkeiten der Förderung begabter Schüler (Binnendifferenzierung im Kurs):
  1. Schüler erhalten den Zusatzauftrag, selbstständig ein weiteres Listenprädikat bei vorgegebener Spezifikation zu entwerfen und zu implementieren.
  2. Schüler erhalten den Auftrag, die Prädikate lauf Variante 1 zu analysieren und deren Wirkungsweise zu erläutern.

Zurck