相关疑难解决方法(0)

DCG扩展:坚定不移被忽视了吗?

假设我有以下DCG规则:

 factor(X) --> "(", expr(X), ")".
Run Code Online (Sandbox Code Playgroud)

通常这将被翻译为:

 factor(X, A, B) :-
    [40|C] = A, expr(X, C, D), [41|B] = D.
Run Code Online (Sandbox Code Playgroud)

是否允许Prolog系统将其翻译如下,
即将统一合并到头部和目标中?

 factor(X, [40|A], B) :-
    expr(X, A, [41|B]). 
Run Code Online (Sandbox Code Playgroud)

如果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草案2012-11-20

prolog dcg iso-prolog

5
推荐指数
1
解决办法
743
查看次数

标签 统计

dcg ×1

iso-prolog ×1

prolog ×1