Ergebnis 1 bis 2 von 2

Thema: [PROLOG] Arithmetische Ausdrücke als Grammatik einlesen

  1. #1
    PaddyG
    Gast

    Standard [PROLOG] Arithmetische Ausdrücke als Grammatik einlesen

    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).
    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
    Achtung: Dies ist ein alter Thread im HTML und Webmaster Forum
    Diese Diskussion ist älter als 90 Tage. Die darin enthaltenen Informationen sind möglicherweise nicht mehr aktuell. Erstelle bitte zu deiner Frage ein neues Thema im Forum !!!!!

  2. #2
    Forum Guru Avatar von The User
    Registriert seit
    28.10.2007
    Ort
    Zwischen Pazifik und Atlantik...
    Beiträge
    4.044
    Danke
    0
    Bekam 0 mal "Danke" in 0 Postings

    Standard

    Das liegt daran:
    ausdruck(X) :- term(X).
    Dann geht er zu:
    term(X) :- faktor(X).
    Dann:
    faktor(X) :- ausdruck(X).
    - und wir landen wieder am Anfang!
    Du kannst es einmal hiermit probieren:
    Code:
    faktor(X) :- ausdruck(X), !.
    (! ist immer das Allheilmittel bei so Endlosschleifen, das dann doch nicht alles heilt. Aber probieren geht über s tudieren!)
    Ansonsten versuch das Programm so umzustrukturieren, dass die Rekursion nicht mit der unverkürzten, sondern immer mit eine verkürzten Liste stattfindet, dann wird er zum Ender kommen, wenn die Liste leer ist, garantiert.
    Du hast ja auch einen Rekursionsabbruch, mit term(X) :- faktor(X).
    Der tritt nur nicht ein, da er immer wieder mit der selben Liste aufgerufen wird.
    Wenn es mit dem ! erst nicht funktioniert, dann such mal eine andere Endlosschleife, wo immer wieder das selbe aufgerufen wird.

    Viele liebe Grüße
    The User

Ähnliche Themen

  1. Ich brauch ein ENGLISCHEN grammatik Überprüfer
    Von Natscho im Forum Off Topic und Quasselbox
    Antworten: 8
    Letzter Beitrag: 18.03.2010, 00:58
  2. Prolog Grammatik einlesen ?
    Von minfler im Forum Forum für alle anderen Programmiersprachen
    Antworten: 7
    Letzter Beitrag: 17.01.2008, 14:47
  3. Reguläre Ausdrücke
    Von Jessica Heinze im Forum PHP Forum - Apache - CGI - Perl - JavaScript und Co.
    Antworten: 3
    Letzter Beitrag: 08.10.2007, 14:34
  4. Grammatik Fehler?
    Von Mella im Forum Off Topic und Quasselbox
    Antworten: 2
    Letzter Beitrag: 12.06.2007, 14:09
  5. Vulgäre Ausdrücke
    Von unique im Forum Off Topic und Quasselbox
    Antworten: 3
    Letzter Beitrag: 24.06.2004, 21:08

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •