Расширение 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)

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