счетчик(число)
сум(код,число)
пауза принадлежит(число,код)
выбор(код,код)
иьЗорЗ(число,ход,код)
CLAUSES
I ************* А ***************♦♦***♦****♦***************♦/
/* Код основного механизма */
/********** -(г*********************************************/
выдажяцийся_ум (Код) : makewindow(2,14,10,"**** Быки и коровы *♦**"г 1,1,23,78),
makewindow(2,14,10,"",6,15,10,50), чистка, %1
предположение(Код), %2
проверка(Код), %3
сообщение, %4
пауза. /***********♦********************************♦***********/
% 1. Чистка - очистка внутренней базы данных программы
/+******♦***************♦******♦**•***♦***********♦*******/
чистка:-отменить(запрос(Предположение,Быки,Коровы)). отменить(_):-retractall(запрос(_,_,_))■
/********************************************************/
% 2. Предположение(Код) - генерация числа-предположения
i it******************************************************/
предположение(Код):Код=[Х1,Х2,ХЗ,Х4],выбор(Код,[1,2,3,4,5,6,7,8,9,0]).
/********* + *******Определение подмножества***************/
% 2.1 выбор(X,XI) % список X является подмножеством списка XI
/********************♦***♦****»**********■**♦*************/
выбор([X|Xs],Ys):-выборЗ(X,Ys,Ysl),выбор<Xs,Ysl). выбор([],Ys) .
/*****************Выделение элемента из списка***********/ % 2.2 выборЗ(Х,Х1,Х2) -
% список Х2 получен в результате удаления одного
% вхождения элемента X из списка XI
/♦****♦************♦*****♦**************************♦****/
выборЗ(Х,[Х|Х1],Х1).
выборЗ(Х, [Y|Y1], [Y|Z1]) :-выборЗ(Х,Х1,г1) .
/it*******************************************************/ % 3. Проверка предложенного предположения
/************************ 4- ************* а*****************/
проверка(Предположение):not(противоречивое(Предположение)),вопрос(Предположение).
/б*******************************************************/ % 3.1. Новое предположение противоречиво, если в нем % количество быков и коров не соответсвует старому
/♦A**************************а************************-**i/
противоречивое(Предположение) :запрос(СтароеПредположение,Быки,Коровы), not(соответствутот_быки_и_коровы(СтароеПредположение,
Предположение,Быки,Коровы)).
соответствуж1т_быки_и_коровы (СтароеПредположение,
Предположение,Быки,Коровы):точнов_совпадвние(СтароеПредположение,Предположение,N1), EiixH=Nl, «Правильнее число быков общие_члены(СтароеПредположение,Предположение,N2), Koposw=N2-Быки. ^правильноечисло коров точное_совпаденив(Xs,Ys,N):-точн_совпгдвние(Xs,Ye,0,N). точн_совпадекие([Х|Хв],[Х|Ys],K,N):К1=К+1,! , точн_совпаденив(Xs,Ys,Kl,N) . точн_совпадение([Х|Ха],[Y|Y»],K,N):XOI, ! , фочк совпадение (Xs,Ys,К,Н) . точн_совпадение([],[],N,N).
общие члены (Xs , Ys ,. N) : -общ, члены (Xs , 1 а , 0 , Ы) . общ_члены([Х|Х8],Ys,K,N)
принадлежит(X,Ys),К1=К+1,>,общ_«лены(Xs,Ys,Kl, N) . общ_члены([Х|Хз],Ys,K,N):-!, общ_члеиы(Xs,Ys,К,N). общ_члены([],Ys,N,N).
/*******<-*****Определение принадлежности списку**********/
% 3.1.1. принадлежит(X,Y) % элемент X принадлежит списку Y
/t*******************************************************/
принадлежит(X,[X|Y]).
.принадлежит(X,[X1|Y]):-принадлежит(X,Y).
/********************************•***♦********************/
% 3.2. вопрос(Предположение) % вопрос относительно истинности числа-предположения
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.