|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
08.05.2012, 12:27 | #1 |
Новичок
Джуниор
Регистрация: 08.05.2012
Сообщений: 1
|
Здравствуйте. Попытался написать программу метод резолюции на прологе, но программа мне выдает ошибки не пойму почему.
domains
i=integer list=i* list2=list* s=symbol predicates vopr(list2,list2). peresech(list,list,list,list,list,i ). vibor(i,i,i). while(list2,list2,list2,list2,list2 ). proverka(list,i,list2). func(i,list,list2,list2). obratnii(list,list,list). sovmestimi_li(list,list,i,i,i). obedinenie(list,list,list,list). add(list2,list,list2). elem(list2,list,i). vse_2(list,i). clauses vibor(1,1,0). vibor(1,2,0). vibor(2,1,0). vibor(2,2,0). vibor(0,2,0). vibor(2,0,0). vibor(0,0,0). vibor(0,1,1). vibor(1,0,1). vopr(List,R):-while(List,List,List,List,R). while([X|List],[],T,L,Rez):-while(List,List,T,L,Rez). while([],[],T,T,Rez):-Rez=[[0]]. while([],[],T,L,Rez):-not(T=L),while(T,T,T,T,Rez). while([X|List],[Y|List1],T,L,Rez):-peresech(X,Y,X,Y,D,0),proverka(D,Z, T),Z=3,Rez=[[1]]. while([X|List],[Y|List1],T,L,Rez):-peresech(X,Y,X,Y,D,0),proverka(D,Z, T),not(Z=3),func(Z,D,T,T1),while([X|List],List1,T1,L,Rez). func(1,D,T,T1):-T1=T. func(2,D,T,T1):-elem(T,D,I),I=1,add(T,D,T1). func(2,D,T,T1):-elem(T,D,I),I=0,T1=T. proverka([],1,T). proverka([A|L],Z,T):-vse_2([A|L],F),F=1,Z=3. proverka([A|L],Z,T):-vse_2([A|L],F),F=0,elem(T,[A|L],I),I=0,Z=1. proverka([A|L],Z,T):-vse_2([A|L],F),F=0,elem(T,[A|L],I),I=1,Z=2. peresech([],[],L1,L2,[],I). peresech([X|List1],[Y|List2],L1,L2,L,N):-vibor(X,Y,T),T=0,N1=N+1,peresech(Li st1,List2,L1,L2,L,N1). peresech([X|List1],[Y|List2],L1,L2,L,N):-vibor(X,Y,T),T=1,sovmestimi_li(L1,L 2,0,N,I),I=0,L=[]. peresech([X|List1],[Y|List2],L1,L2,L,N):-vibor(X,Y,T),T=1,sovmestimi_li(L1,L 2,0,N,I),I=1,obedinenie(L1,L2,[],L). sovmestimi_li([],[],N1,N,1). sovmestimi_li([X|L1],[Y|L2],N,N,I):-N1=N+1,sovmestimi_li(L1,L2,N1,N,I). sovmestimi_li([X|L1],[Y|L2],N1,N,I):-N1<N,vibor(X,Y,K),K=1,I=0. sovmestimi_li([X|L1],[Y|L2],N1,N,I):-N1>N,vibor(X,Y,K),K=1,I=0. sovmestimi_li([X|L1],[Y|L2],N1,N,I):-N1<N,vibor(X,Y,K),K=0,N2=N1+1,sovme stimi_li(L1,L2,N2,N,I). sovmestimi_li([X|L1],[Y|L2],N1,N,I):-N1>N,vibor(X,Y,K),K=0,N2=N1+1,sovme stimi_li(L1,L2,N2,N,I). obedinenie([],[],R,L):-obratnii(R,[],L). obedinenie([2|L1],[2|L2],R,L):-R2=[2|R],obedinenie(L1,L2,R2,L). obedinenie([0|L1],[1|L2],R,L):-R2=[2|R],obedinenie(L1,L2,R2,L). obedinenie([1|L1],[0|L2],R,L):-R2=[2|R],obedinenie(L1,L2,R2,L). obedinenie([0|L1],[0|L2],R,L):-R2=[0|R],obedinenie(L1,L2,R2,L). obedinenie([1|L1],[1|L2],R,L):-R2=[1|R],obedinenie(L1,L2,R2,L). obedinenie([2|L1],[1|L2],R,L):-R2=[1|R],obedinenie(L1,L2,R2,L). obedinenie([1|L1],[2|L2],R,L):-R2=[1|R],obedinenie(L1,L2,R2,L). obedinenie([2|L1],[0|L2],R,L):-R2=[0|R],obedinenie(L1,L2,R2,L). obedinenie([0|L1],[2|L2],R,L):-R2=[0|R],obedinenie(L1,L2,R2,L). obratnii([],T,T). obratnii([X|R],T,L):-T1=[X|T],obratnii(R,T1,L). add(L,X,[X|L]). elem([],X,I):-I=1. elem([X|L],X,I):-I=0. elem([Y|L],X,I):-not(X=Y),elem(L,X,I). vse_2([],1). vse_2([X|L],I):-not(X=2),I=0. vse_2([2|L],I):-vse_2(L,I). |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Почему программа выдает такой результат? | zink | Общие вопросы C/C++ | 3 | 13.02.2012 17:55 |
Метод линейной резолюции | Taisya | Помощь студентам | 0 | 06.07.2011 18:48 |
Программа не работает в Code Block, не пойму почему. | Stunt Man | Помощь студентам | 1 | 03.06.2011 19:38 |
стек в С++, программа выдает ошибки | Aleksa_ks | Помощь студентам | 1 | 10.05.2010 22:00 |
Немогу понять,почему Microsoft Visual Studio 2005 (C++) выдает ошибки? | FanEurovision | Visual C++ | 3 | 18.05.2009 20:06 |