Программа-распознаватель цепочек, удовлетворяющих

 
0
 
Prolog | Функциональные языки
ava
Рыся | 22.01.2013, 18:28
Нужно создать программу-распознаватель цепочек, удовлетворяющих шаблону, используя в качестве базового механизма грамматику, порождающую язык, заданный шаблоном.
(ad)*(x|f)+re(tw)*

include "1.inc"

domains
  lc = char*

predicates

nondeterm s(lc,lc,integer,integer)
nondeterm a(lc,lc,integer,integer)
nondeterm b(lc,lc,integer,integer)
nondeterm c(lc,lc,integer,integer)
nondeterm d(lc,lc,integer,integer)
nondeterm e(lc,lc,integer,integer)
nondeterm sTol(string,lc,integer)



clauses

sTol("",[],0).
sTol(S,L,N):-frontchar(S,C,X),
                 sTol(X,L1,N1),
                 L=[C|L1],
                 N=N1+1.

s(Si,S0,M,N):-M<=N,
              M1=M+1,
              a(Si,S1,M1,N),
              b(S1,S2,M1,N),
              c(S2,S3,M1,N),
              d(S3,S4,M1,N),
              e(S4,S0,M1,N); 
              M<=N,
              M1=M+1,
              b(Si,S1,M1,N),
              c(S1,S2,M1,N),
              d(S2,S3,M1,N),
              e(S3,S0,M1,N);
               M<=N,
              M1=M+1,
              a(Si,S1,M1,N),
              b(S1,S2,M1,N),
              c(S2,S3,M1,N),
              d(S3,S0,M1,N);
               M<=N,
              M1=M+1,
              b(Si,S1,M1,N),
              c(S1,S2,M1,N),
              d(S2,S0,M1,N).
           
              

a(Si,S0,M,N):-M<=N,
               Si=['a','d'|S0];
               M<=N,
               M1=M+1,
               Si=['a','d'|S1],
               a(S1,S0,M1,N).

b(Si,S0,M,N):-M<=N,
               Si=['x'|S0];
               M<=N,              
               Si=['f'|S0];
               M<=N,
               M1=M+1,
               Si=['x'|S1],
               c(S1,S0,M1,N);
               M<=N,
               M1=M+1,
               Si=['f'|S1],
               c(S1,S0,M1,N).
               
c(Si,S0,M,N):-M<=N,
               Si=['r'|S0];
               M<=N,
               M1=M+1,
               Si=['r'|S1],
               d(S1,S0,M1,N).
          
               
               
d(Si,S0,M,N):-M<=N,
               Si=['e'|S0];
               M<=N,
               M1=M+1,
               Si=['e'|S1],
               d(S1,S0,M1,N).
               
e(Si,S0,M,N):-M<=N,
               Si=['t','w'|S0];
               M<=N,
               M1=M+1,
               Si=['t','w'|S1],
               e(S1,S0,M1,N).

goal
                 write("Vvedite sroku: "),
                 readln(S),
                 sTol(S,L,N),
                 s(L,[],0,N),
                 write("pravil'naya stroka");
                 write("nepravil'naya stroka").

При вводе, например, строки xxxfffxfre, пишет неправильная строка, что неверно. Как сделать правильно?
Ответы (1)
ava
kshyms | 19.02.2013, 15:00 #
Какой IDE пользуйтесь?
Зарегистрируйтесь или войдите, чтобы написать.
Фирма дня
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Участники
advanced
Отправить