Hallo,
habe da ein Problem mit folgender Aufgabenstellung, folgende Grammatik soll in Prolog programmiert werden:
(1)Ausdruck--> Term | Term + Ausdruck | Term - Ausdruck
(2)Term --> Faktor | Faktor + Term | Faktor / Term
(3)Faktor --> a | b | c | (Ausdruck
Folgendes habe ich schon geschrieben:
Code
%faktor1
faktor1(a).
faktor1(b).
faktor1(c).
%ausdruck(X)
ausdruck(X):-
term(X).
ausdruck(X):-
X=.. ['+'|Rest1],
Rest1=[Term|Ausdruck],
term(Term),
ausdruck(Ausdruck).
ausdruck(X):-
X=.. ['-'|Rest1],
Rest1=[Term|Ausdruck],
term(Term),
ausdruck(Ausdruck).
%term(X)
term(X):-
faktor(X).
term(X):-
X=.. ['*'|Rest1],
Rest1=[Faktor|Term],
faktor(Faktor),
term(Term).
term(X):-
X=.. ['/'|Rest1],
Rest1=[Faktor|Term],
faktor(Faktor),
term(Term).
%faktor(X)
faktor(X):-
faktor1(X).
faktor(X):-
ausdruck(X).
Alles anzeigen
Beim Testen mit:
ausdruck(a*(b-c)).
meldet er: Out of local stack.
Ich muss also einen Rekursionsabbruch einbauen und die Rekursion terminieren, oder?
Ich komm leider nicht drauf, an welcher Stelle ich den einbauen muss...hab schon alles mögliche probiert.
Danke im Voraus
PaddyG