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