c // 1 и q // 1 являются точками входа (иначе говоря, производство верхнего уровня) Грамматики Определенных Условий, определенной ниже, где вы найдете
c(F) --> ....
q(F) --> ....
Этот стиль 'вызова' в точке входа DCG не рекомендуется, обычно лучше вызывать фразу (грамматика, TextToAnalyze, TextAfterAnalysis) , в данном случае phrase((c(F) ; q(F)), "some text", "")...
Оператор -->
обычно переписывается с добавлением 2 аргументов, которые вызывают у вас беспокойство.
РЕДАКТИРОВАТЬ
Т.е. c(L) --> lead_in,arrange(L),end.
переписываетсядо
c(L,X,Y) :- lead_in(X,X1),arrange(L,X1,X2),end(X2,Y).