число = integer
список = integer* predicates
решение (список)
принадлежит (число, список)
не_бьет(число, число, список)
шаблон (список) clauses
решение ([]).
решение ([Х,У|Остальные])>
% Первый ферзь на поле X/Y,
% Остальные ферзи на полях из списка Остальные
решение (Остальные), принадлежит (Y,[1,2,3,4,5,6,7,8]), не_бьет (X,Y, Остальные).
% Первый ферзь не бьет остальных
не_бьет (_,_,[]). % Некого бить не_бьет (X, Y,[X1, Y1 |Остальные])> Y<>Y1, % Разные Y-координаты
Y1-Y<>X1-X, % Разные диагонали Y1-Y<>X-X1, не_бьет (X,Y, Остальные). Принадлежит (X,[X|J) Принадлежит (X,[_|L])> принадлежит (X,L).
/.ШЩ.ЩШиЩ1Ш1ШШ.Щ).ищи|ШИ>ШШ...»Ш,/
% Шаблон решения
/*******************************************************.#*******♦/
шаблон (f 1 ,_,2,_,3,_,4,_,5,_,6,_,7,_,8,J).
goal шаблон (Позиция),решение (Позиция).
/**.***.****♦******«*,**♦*.***♦.*„*********„**.**,**„♦**„****,
/*—Конец программы «Задача о 8 ферзях»------------ */
7.2. Задачииупражнения
Написать программу для решения задачи о N ферзях.
8. ИГРОВЫЕ ПРОГРАММЫ
8.1. "Ханойскиебашни"
/***♦****♦******+*♦*♦**♦********♦*****♦♦*******♦****♦***♦/
% "Ханойские башни"
/******** + **+************** + **** + **** + ** + ****•******** + ** I
I*Целевой предикат:
ханой(Число) */
/А*******************************************************/ /********♦**♦***♦**♦************♦******♦********♦****+***/ % Переместить N дисков со стержня А на стержень С, % используя стержень В как вспомогательный. При этом За % один ход можно переместить только один диск и нельзя % класть больший диск на меньший.
/****+***************************************************/
DOMAINS
спис_строк=строка* число=л.пЪедег строка=з tring
PREDICATES
ханой(число)
хан(число,число,строка,строка,строка,спис_строк)
добав(спис_строк,спис_строк,спис_отрок)
вывод(спис_строк)
clauses ханой(N):makewindow(2,2,2,"Ханойские Башни",1,1,23,78), makewindow(2,2,2,"",3,3,18,74), хан(N,1,А,В,С,Moves),вывод(Moves), readchar(_).
хан(N,N2,А,В,С,Moves):-N>1,N1=K-1,N3=N2+1, xaH(Nl,N3,A,C,B,Msl), xaH(Nl,N3,B,A,C,Ms2), добав(Msl,[A," to ",C|Ms2],Moves).
хан(1,Ы2,А,В,С, [A, " to '', C] ) :-A="A" ,B="B" ,C="C" ,
N2 mod 2=1.
xaH(l,N2,A,B,C,[A," to ",C]):-A="A",B="C",C="B".
хан(1,Ы2,А,В,С,[A," to ",C]):-A="B",B="A",C="C".
хан(1,Ы2,А,В,С,[A," to ",C]):-A="B",B="C",C="A".
хан(1,Ы2,А,В,С,[A," to ",C]):-A="C",B="A",C="B".
хан(1,Ы2,А,В,С,[A," to ",C]):-A="C",B="B",C="A".
добав([],Y,Y).
добав([Х|Ы] ,L2, [X|L3]) :-добав (LI ,1,2 ,L3)
вывод([]):-!,nl. вывод([Х1,Х2,ХЗ|У]):-
write(XI,X2,X3),write("\t"),
вывод(Y).
8.2. "Выдающийсяум"
% "Выдающийся ум"
/**************♦****♦*****************♦********♦*♦*******/
% Программа являетсяреализацией игры "Быкиикоровы".
% Отгадывается четырехзначноечисло.
% Особенности: предполагается, чтовводятсятолько
% допустимыезначения.
% Ограничения: всецифры числадолжныбытьразличны,
% допускаютсятолькоконструкциивидаabed.
у*****************************♦*************♦************/
DOMAINS число= integer
код=число*
sarrpoc=3arrpoc (код, число, число)
database - выд_ум запрос(код,число,число) бд_счетчик(число)
PREDICATES видающийся_ум(код) чистка
предположение(код) проверка(код) сообщение
противоречивое(код) выв числа(код) вопрос(код)
соответствуют_быки_и_коровы(код,код,число,число) точное совпадение(код,код,число) точн_совпадение(код,код,число,число) общие_члены(код,код,число) общ_члены(код,код,число,число) допустимо(число,число) отменить(запрос)
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.