DCG-Erweiterung: Wird Standfestigkeit ignoriert?

Angenommen, ich habe die folgende DCG-Regel:

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

Normalerweise würde dies übersetzt werden in:

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

Wäre es einem Prolog-System gestattet, es wie folgt zu übersetzen, d.h.
die Vereinigungen in den Kopf und das Ziel zu verschmelzen?

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

Wenn die DCG-Erweiterung nicht standhalten würde, wäre dies nicht zulässig
[41 | B] in das dritte Argument des Ausdrucksaufrufs setzen.

Aber ich denke, Standhaftigkeit ist vorhanden, also sollte alles in Ordnung sein?

Tschüss

P.S .: Für eine informelle Definition der Standhaftigkeit siehe:
Richard O'Keefe, 2009:
"Als Erfinder des Begriffs" standhaft "in der Prolog-Programmierung,
Ich sollte dafür sein. Standhaftigkeit im Grunde
bedeutet, dass Sie ein Prädikat nicht auf den falschen Weg zwingen können
durch falsches Ausfüllen von Ausgabeargumenten. "
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301

P.S.S .: Für die andere DCG-Übersetzung siehe zum Beispiel die neueste
DCG-Standardvorschlag. Der Anhang enthält einen DCG-Übersetzer
Quellcode:
ISO / IEC DTR 13211-3: 2006
Definite-Klausel-Grammatikregeln
Klaus Daessler
20. November 2012
N238 DIN Draft 2012-11-20

Antworten auf die Frage(1)

Ihre Antwort auf die Frage