2016-06-07 12 views
1

Ich versuche, einen Syntaxbaum für Sprache a^n b^n zu machen.Prolog Parse Tree a^n b^n

Unten ist, was ich versucht habe, aber es wird nur wahr, ohne den Parse-Baum zu verletzen.

%% a^n, b^n.  ex) s([a,a,b,b],[]). = true 

s --> a,s,b. 
s --> []. 

s(ab(S)) --> a,s(S),s. 
s([]) --> []. 

Zum Beispiel würde ich ab(ab([])) ausdrucken möchte, wenn ich s(T,[a,a,b,b],[]).

Bitte helfen Sie geben!

Antwort

5

s(ab(S)) --> a,s(S),s. sollte s(ab(S)) --> [a],s(S),[b]. sein, die Sie die richtigen Ergebnisse erhalten:

s([]) --> []. 
s(ab(S)) --> [a], s(S), [b]. 

| ?- phrase(s(L), [a,a,b,b]). 

L = ab(ab([])) ? ; 

no 
| ?- phrase(s(ab(ab([]))), L). 

L = [a,a,b,b] 

yes 
| ?- phrase(s(L), T). 

L = [] 
T = [] ? ; 

L = ab([]) 
T = [a,b] ? ; 

L = ab(ab([])) 
T = [a,a,b,b] ? ; 

L = ab(ab(ab([]))) 
T = [a,a,a,b,b,b] ? ; 

L = ab(ab(ab(ab([])))) 
T = [a,a,a,a,b,b,b,b] ? ; 
...