Содержание
- 2. План. Логические задачи Ханойские башни Задача о расстановке ферзей
- 3. Пример 1. Ханойские башни. Постановка задачи: В игре используется три стержня и набор из N дисков
- 4. Стратегия решения Один диск перемещается непосредственно N дисков переносятся в 3 этапа: Перенести N-1 дисков на
- 5. Используемые предикаты Предикат hanoy (integer), показывающий со сколькими дисками идет игра. Предикат move, описывающий перенос N
- 6. Domains loc = right; middle, left Predicates hanoy (integer) move (integer, loc, loc, loc) inform (loc,
- 7. move (N, A, B, C) :- M=N-1, move (M, A, C, B), inform (A, C), move
- 8. Move a disk from middle to left Move a disk from middle to right Move a
- 9. Пример 2. Задача о ферзях Постановка задачи: Расставить на шахматной доске 8х8 восемь шахматных ферзей так,
- 10. Для решения задачи нужно составить список вертикалей, горизонталей и диагоналей, являющихся свободными, а также тех, которые
- 11. freelist = integer* - списки свободных вертикалей, горизонталей и диагоналей. Шахматную доску опишем как единый объект:
- 12. Ферзи размещаются по одному до тех пор, пока не будут заняты все вертикали, горизонтали и диагонали.
- 13. place_a_queen (integer, board, board) Нового ферзя добавляем к списку стоящих на доске ферзей. Среди свободных горизонталей
- 14. Листинг программы domains queen = q (integer, integer) queens = queen* freelist = integer* board =
- 15. clauses nqueens (N) :- makelist (N, L), Diagonal=N*2-1, makelist (Diagonal, LL), placeN (N, board([], L, L,
- 16. findandremove (X, [X | Rest], Rest). findandremove (X, [Y | Rest], [Y | Tail]) :- findandremove
- 18. Скачать презентацию