Рефакторинг нарезки в DCG, общие принципы? [ответ на комментарии]
Рассмотрим пункт с вырезом
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?