Расширение DCG: Стойкость игнорируется?

Предположим, у меня есть следующее правило DCG:

 factor(X) --> "(", expr(X), ")".

Обычно это будет переведено на:

 factor(X, A, B) :-
    [40|C] = A, expr(X, C, D), [41|B] = D.

Разрешено ли системе Пролога переводить ее следующим образом, т.е.
объединить объединения в голову и цель?

 factor(X, [40|A], B) :-
    expr(X, A, [41|B]). 

Если расширение DCG не будет устойчивым, оно не будет разрешено
поместить [41 | B] в третий аргумент вызова expr.

Но я думаю, что стойкость на месте, так что все должно быть в порядке?

до свидания

П.С .: Неформальное определение стойкости см .:
Ричард О'Киф, 2009:
«Как изобретатель термина« стойкий »в прологическом программировании,
Я должен быть за это. Стойкость в основном
означает, что вы не можете заставить предикат следовать по неверному пути
неправильно введя выходные аргументы. "
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301

P.S.S .: Для другого перевода DCG см., Например, самый новый
Стандартное предложение DCG. Приложение содержит переводчик DCG
исходный код:
ISO / IEC DTR 13211–3: 2006
Определенные правила грамматики
Клаус Десслер
20 ноября 2012 г.
N238 DIN Draft 2012-11-20

Ответы на вопрос(1)

Ваш ответ на вопрос