假设我有以下 DCG 规则:
factor(X) --> "(", expr(X), ")".
通常这将被翻译为:
factor(X, A, B) :-
[40|C] = A, expr(X, C, D), [41|B] = D.
是否允许 Prolog 系统将其翻译如下,
即将统一合并为头部和目标?
factor(X, [40|A], B) :-
expr(X, A, [41|B]).
如果 DCG 扩展不坚定,则不允许
将 [41|B] 放在 expr 调用的第三个参数中。
但我想踏实已经到位,所以一切都应该没问题吧?
再见
PS:有关坚定的非正式定义,请参见:
Richard O'Keefe,2009:
“作为 Prolog 编程中“坚定”一词的发明者,
我应该赞成它。坚定基本上
意味着你不能强行降低谓词通过错误地填写输出参数来错误的路径
。”
http://blog.gmane.org/gmane.comp.ai.prolog.swi/month=20090301
PSS:有关其他 DCG 翻译,请参见最新的
DCG 标准提案。附录包含 DCG 转换器
源代码:
ISO/IEC DTR 13211–3:2006
定句语法规则
Klaus Daessler
2012 年 11 月 20 日
N238 DIN Draft 2012-11-20