Rozszerzenie DCG: czy niezłomność jest ignorowana?

Załóżmy, że mam następującą regułę DCG:

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

Normalnie byłoby to tłumaczone na:

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

Czy system Prolog będzie mógł przetłumaczyć go w następujący sposób, tj.
połączyć zjednoczenia w głowę i cel?

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

Gdyby rozszerzenie DCG nie było trwałe, nie byłoby to dozwolone
umieścić [41 | B] w trzecim argumencie wywołania expr.

Ale chyba niezłomność jest na miejscu, więc wszystko powinno być w porządku?

PA

P.S .: Dla nieformalnej definicji niezłomności patrz:
Richard O'Keefe, 2009:
„Jako wynalazca terminu„ niezłomny ”w programowaniu Prologu,
Powinienem być za tym. Niezłomność w zasadzie
oznacza, że ​​nie możesz zmusić orzeczenia do złej drogi
błędnie wypełniając wyjściowe argumenty. ”
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301

P.S.S .: Dla innego tłumaczenia DCG patrz na przykład najnowszy
Standardowa propozycja DCG. Dodatek zawiera tłumacz DCG
kod źródłowy:
ISO / IEC DTR 13211–3: 2006
Reguły gramatyczne określone w klauzuli
Klaus Daessler
20 listopada 2012 r
N238 DIN Draft 2012-11-20

questionAnswers(1)

yourAnswerToTheQuestion