Это предположение о том, что вы ожидаете и почему у вас возникли проблемы. Меня это просто беспокоит, потому что я знаю, что вы умны и должны быть в состоянии соединить точки из комментариев. (Комментарии были удалены, когда они были опубликованы, но ОП их видел.)
Это очень точно c для SWI-Prolog.
Когда загружается код Prolog, он автоматически проходит через термин расширение, как указано в expand.pl .
Любое предложение с -->
будет расширено на основе правил dcg_translate_rule / 2 . Поэтому, когда вы используете перечисление / 1 в коде после его загрузки, предложения с -->
уже были расширены. Так что AFAIK вы не можете видеть ([a],example1)
, который является кодом перед загрузкой и расширением термина, но example([a|A], B) :- example(A, B)
, который является кодом после загрузки и расширением термина.
Единственный способ получить требуемый код - это отключить термин расширение во время загрузки, но тогда код, который должен был быть расширен, не будет и код не запустится.
Вы также можете попытаться найти источник для загруженного кода, но я также думаю, что это не то, что вы хотите сделать.
Исходя из этого I'm writing a code generator that converts definite clause grammars to other grammar notations.
, возможно, вам нужно заменить код для dcg_translate_rule / 2 или каким-то образом перехватывает код при загрузке и перед расширением термина.
HTH
Что касается ошибки, связанной с -->(example,A),writeln(A).
, потому что это не является допустимым предложением DCG.