1

考虑一个带有 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 中使用剪辑时需要考虑一些额外的暗角?

4

0 回答 0