Я прохожу через Learn Prolog Now! как самостоятельное изучение, и теперь я узнаю об определенных граммамах. У меня возникают трудности с одной из задач Практической сессии. The task гласит:Узнать пролог сейчас! Пример практики DCG
Формального язык по п б 2m с 2m д п состоит из всех строк следующего вида: непрерывная блок через с последующей ненарушенным блоком из б с последующим ненарушенным блоком с с последующим ненарушенным блоком д с, например, что и д блоки точно такой же длины, и с и д блоки также точно такой же длины и, кроме того, состоит из четного числа с с и д с соответственно. Например, & epsilon;, abbccd и aaabbbbccccddd все принадлежат к п б 2m гр 2m д п. Напишите DCG, который генерирует этот язык.
Я могу написать правила, которые генерируют п д п, б 2m гр 2m, и даже п б 2m и с 2m г н ... но я не могу показаться, чтобы объединить все эти правила в п б ого с ого д п. Ниже приведены мои правила, которые могут генерировать n d n и b 2m c 2m.
s1 --> [].
s1 --> a,s1,d.
a --> [a].
d --> [d].
s2 --> [].
s2 --> c,c,s2,d,d.
c --> [c].
d --> [d].
Является п б 2м с 2м d п действительно CFG, и можно написать DCG не используя только то, что учили на уроке (никаких дополнительных аргументов или код , и т.д)? Если да, может ли кто-нибудь предложить мне некоторое руководство, как я могу присоединиться к ним, чтобы я мог решить данную задачу?
Спасибо, Xonix. Это работает, но, к сожалению, он использует концепции, которые не рассматриваются до конца (кодовые блоки, разрезы и т. Д.). Я честно считаю, что это невозможно, используя только простые правила ... или, если это так, это не стоит усилий, потому что в «реальном мире» можно использовать другие концепции, как в вашем примере. – Timothy