Рефакторинг нарезки в 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?

0 ответов

Другие вопросы по тегам