/♦л******************************************************/ вопрос(Предположение):счетчик (Счетчик) , clear-window, nl, nl,
write("Сколько быков и коров в числе "), выв_числа(Предположение),wri te("?"),nl,
write("XtEbiKOB (цифр на своих местах)?"),readint(Быки),
write("\tKopoB (цифр не на своих местах)?"),readint(Коровы),nl, допустимо(Быки,Коровы),!,
asserta(запрос(Предположение,Быки,Коровы)),
Счвтчик1=Счетчик+1,
asserta(бд_счетчик(Счетчик1)),
Быки=4.
/**А************** ******* ■* ****+**************** **********/
% 3.2.1. Вывод числа-предположения
/***** ♦******* + **<.************♦♦***♦****■*■***♦♦***********/
выв_числа([ ]):-!.
выв_числа([Х|Y]):-write(X),выв_числа(Y).
/******♦**♦********************** к***********■********* + **/ % 3.2.2. Проверка на допустимость числа быков и коров
/**♦********♦*****♦*****♦***********♦***♦***♦+**♦********/
допустимо(Быки,Коровы):-Быки+Коровы<=4.
/А*-********************»*********************************/
% 4. Сообщение
/* ************************* *************** + **************/
сообщение:findall(N,6fl_C4eT4HK(N),W),cyM(W,NN),
write("Ответ найден после ",NN," запросов").
/***♦*****•♦******■**♦*******♦*****************************/ % 4.1. Подсчет количества вопросов
I -к*******************************************************/
счетчик(0). %инициализация счетчика оум([],0).
сум([Х|XI],N)!-сум(XI,N1),N=N1+1.
у********************************************************/
% Вспомогательные предикаты у********************************************************/
пауза:-nl,write("Нажмите любую клавишу"),readchar(_).
8.3. "Ним"
/it***********************************к*******************/
% Игра "Ним"
/♦л******************************************************/
%В игре используются спички, разложенные в N кучек. Игроки %поочередно берут из любой кучки произвольное число спичек %(можно все). Побеждает игрок, который берет последнюю %спичку.
/it*************************** а-***************************/
DOMAINS
ход=ход(число,число)
спие=з tring*
числ cnnc=integer*
игрок=компыотер;игрок
число=д.пЪедег
crpoKa=3tring
PREDICATES
игра(строка)
инициализировать(строка,числ_спис,строка)
отобраэить_игру(числ_спис,строка)
играть(числ_спис,строка,строка)
игра_окончена(числ спис,строка,строка)
объявить(строка)
выбрать_х.од (числ_опис, строка, ход)
ходить(ход,числ_спис,числ_спис)
другой_игрок(строка,строка)
читать(ход)
опасная(числ_спис,числ_спис)
безопасный_ход(числ_спис,числ_спис,ход)
безоп_ход(числ_спис,числ_спис,число,ход)
безопасная(числ_спис)
ним_сумма(числ_спис,числ_спис,числ_спис)
нуль(числ_спис)
двоичное(число,числ_спис)
ним_сложение(числ_спис,числ_спис,числ_спис)
десятичное(числ_спис,число)
дес(чиол_спио,число,число,число)
может_быть_нуль(«иол_сгшс,числ спис,числ_спис,число)
DATABASE - ним ход(число,число)
clauses
/♦*♦*#******♦************♦******************#************/
% Предикаты верхнего уровня
/*******************************♦*************♦**********/
игра(Игра):инициализировать(Игра,Позиция,Игрок), отобразить_игру(Позиция,Игрок), играть(Позиция,Игрок,Результат).
I *******♦************************♦***********♦***********/
% Инициализация игры
/л*******************************************************/
инициализировать(ним,[3,4,5],противник).
/****************+>****•**********•****•*****+*•*********/
% Отображение игры на экране
/******************************************♦***♦*********/
отобразить_игру(Позиция,Игрок):-write(Позиция),nl,nl.
/*•** + ***** ***************************+**■****+*******+***/
% Игра
/*********а+********+***+********** а*********************/
играть(Позиция,Игрок,Результат):игра_окончена(Позиция,Игрок,Результат),!, объявить(Результат). играть(Позиция,Игрок,Результат):выбрать ход(Позиция,Игрок,Ход), ходить(Ход,Позиция,Позиция1), отобразить_игру(Позиция!,Игрок), другой_игрок(Игрок,Игрок1),! , играть(Поэиция1,Игрок!,Результат).
/л*******************************************************/ % Условие окончания игры % список кучек пуст
/*************************♦*******♦****♦*****************/
игра_окончена([],Игрок,Игрок).
/************************* ************** ****♦*****+******/
% Выбор хода
/****************************************************** **/
выбрать_ход(Позиция,противник,Ход):write("Сделайте ход"),п1, читать(Ход). %Ход человека выбрать_ход(Ns,компьютер,Ход):опасная(Ns,Сумма), %Оценка позиции беэопасный_ход(Ns,Сумма,Ход). %Ход компьютера выбрать_ход(Ns,компьютер,ход(1,1)):- %Произвольный ход безопасная(Ns). %компьютера, если
%позиция безопасная
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.