Prolog Parse Tree a ^ n b ^ n

时间:2016-06-07 07:07:42

标签: prolog dcg

我正在尝试为语言a ^ n b ^ n创建一个解析树。

以下是我尝试过的内容,但它只是在不引用解析树的情况下变为现实。

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

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

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

例如,如果我输入ab(ab([]))

,我想打印s(T,[a,a,b,b],[]).

请帮忙!

1 个答案:

答案 0 :(得分:5)

s(ab(S)) --> a,s(S),s.应该是s(ab(S)) --> [a],s(S),[b].,它会为您提供正确的结果:

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] ? ;
...