Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2012, 12:27   #1
jeka1
Новичок
Джуниор
 
Регистрация: 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).
jeka1 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему программа выдает такой результат? 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