Expansión DCG: ¿Se ignora la firmeza?
Supongamos que tengo la siguiente regla DCG:
factor(X) --> "(", expr(X), ")".
Normalmente esto se traduciría a:
factor(X, A, B) :-
[40|C] = A, expr(X, C, D), [41|B] = D.
¿Se permitiría a un sistema Prolog traducirlo de la siguiente manera, es decir,
¿Para unir las unificaciones en la cabeza y la meta?
factor(X, [40|A], B) :-
expr(X, A, [41|B]).
Si la expansión de DCG no fuera firme, no se permitiría
para poner [41 | B] en el tercer argumento de la llamada expr.
Pero supongo que la firmeza está en su lugar, ¿entonces todo debería estar bien?
Adiós
P.S .: Para una definición informal de firmeza ver:
Richard O'Keefe, 2009:
"Como el inventor del término" firme "en la programación de Prolog,
Debería estar a favor de ello. Firmeza básicamente
significa que no puedes forzar un predicado por el camino equivocado
rellenando los argumentos de salida erróneamente ".
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301
P.S.S .: Para la otra traducción de DCG, vea, por ejemplo, la más reciente
Propuesta estándar DCG. El apéndice contiene un traductor DCG
código fuente:
ISO / IEC DTR 13211-3: 2006
Reglas gramaticales de la cláusula definida
Klaus Daessler
20 de noviembre de 2012
N238 DIN Draft 2012-11-20