Вопрос - формальный язык в прологе

Я пытаюсь создать DCG, который распознает все списки, соответствующие этой форме: a ^ nb ^ 2m c ^ 2m d ^ n .
Я написал следующие правила:
s -> [].
s -> ad.
ad -> a, ad, d.
ad -> bc.
bc -> b, b, bc, c, c.
bc -> [].
a -> [a].
b -> [b].
] c -> [c].
d -> [d].

Когда я пытаюсь оценить строку с этими спецификациями, например список [a, b, b, c, c , d] , работает. Но когда я пытаюсь оценить запрос фраза (s, X) , чтобы я мог видеть все возможные строки, возвращаемые этой грамматикой, он зацикливается на бесконечность.

Что-то не так с тем, как я построили DCG?

6
задан false 29 November 2011 в 18:56
поделиться