In diesem Beispiel soll eine Sprache für eine Roboter-Steuerung
entwickelt werden. Der Roboter kann zwei verschiedene Aktionen ausführen:
up - einen Schritt nach oben, und down - einen Schritt
nach unten.
move --> step. move --> step,move. step --> [up]. step --> [down].
Da die Standard-Prolog-Ausgabe "yes" bzw "no" nicht
wirklich weiter hilft, wird die Grammatik im nächsten Schritt um die
Ausgabe des Parsetrees erweitert, was vor allem beim debuggen von grossem
Nutzen sein kann.
move(move(Step)) --> step(Step). move(move(Step,Move)) --> step(Step),move(Move). step(step(up)) --> [up]. step(step(down)) --> [down].
Im nächsten Schritt wird anstelle des Parsetrees Semantik mit ausgegeben.
In diesem Falle ist die Semantik die Ausgabe des gesamten Weges, den sich der
Roboter bewegt hat.
move(Dist) --> step(Dist). move(Dist) --> step(Dist1),move(Dist2),{Dist is Dist1 + Dist2}. step(1) --> [up]. step(-1) --> [down].