DCG中的重构削减,一般原则是什么? [评论回答]

时间:2016-11-14 16:11:30

标签: prolog dcg prolog-cut

考虑一个带有cut

的子句
f(X) :- g(X), !, h(X).

我认为我们可以按如下方式重构裁员是常识:

h1(X) :- !, h(X).
f(X) :- g(X), h1(X).

但是,对于DCG来说,这种类似宏观的重构裁剪似乎并不奏效。例如,我试图像这样重构一个DCG子句

f(X) --> g(X), !, h(X).

如下所示

h1(X) --> !, h(X).
f(X) --> g(X), h1(X).

但它没有奏效。也就是说,后者h(X)失败,而在重构裁员之前它没有在前者中回溯。

重构DCG时是否有一般原则?或者,在DCG内使用切割时需要考虑一些额外的暗角?

0 个答案:

没有答案