- •Практическое занятие 1. Основы логического программирования
- •Основные парадигмы программирования
- •Понятие предиката
- •Унификация - процесс нахождения решения в Прологе
- •Факты и правила в Прологе
- •Пример программы на Прологе
- •Практикум 1-1
- •Практикум 1-2
- •Практикум 1-3
- •Контрольное задание 1 Исходные данные
- •Задание 1. Генеалогическое дерево
- •Задание 2. Представление правил
- •Практикум 2-1
- •Практикум 2-2
- •Стандартные предикаты
- •Ввод и вывод
- •Практикум 2-3
- •Описание арифметических операций
- •Практикум 2-4
- •Самостоятельные задания
- •Практическое занятие 3. Управление процессом решения задачи. Поиск с возвратом. Рекурсия
- •Использование предиката fail
- •Практикум 3-1
- •Использование предиката cut
- •Практикум 3-2
- •Использование рекурсии
- •Практикум 3-3
- •Практикум 3-4
- •Практикум 3-5
- •Практикум 3-6
- •Хвостовая рекурсия
- •[Head|Tail] [Голова|Хвост]
- •Практикум 4-1
- •Встроенный предикат findall
- •Практикум 4-2
- •Вычисление длины списка
- •Практикум 4-3
- •Проверка принадлежности элемента списку
- •Практикум 4-4
- •Слияние двух списков
- •Практикум 4-5
- •Вычисление суммы списка чисел
- •Практикум 4-6
- •Практикум 4-7
- •Удаление элемента из списка
- •Практикум 4-8
- •Получение элемента списка по его номеру
- •Практикум 4-9
- •Запись элементов списка в обратном порядке
- •Поиск максимального (минимального) элемента в списке
- •Практикум 4-10
- •Самостоятельные задания
- •Контрольное задание 2 Исходные данные
- •Практическое занятие 5. Решение логических задач
- •Пример простой логической задачи (два измерения)
- •Практикум 5-1
- •Практикум 5-2
- •Пример задачи (три измерения)
- •Практикум 5-3
- •Пример задачи (альтернативные высказывания)
- •Практикум 5-4
- •Практикум 5-5
- •Самостоятельные задания
- •Контрольное задание 3 Исходные данные
- •Задача 1
- •Задача 2
- •Задача 3
- •Задача 4
- •Задача 5
- •Задача 6
- •Задача 7
- •Задача 8
- •Задача 9
- •Задача 10
- •Задача 11
- •Задача 12
- •Задача 13
- •Задача 14
- •Задача 15
- •Задача 16
- •Задача 17
- •Задача 18
- •Задача 19
- •Задача 20
- •Задачи повышенной сложности
Задачи повышенной сложности
Пример задачи (пять измерений)
Пять друзей-садовников, живущих рядом друг с другом, выращивают в своих садах три вида урожаев: фрукты (яблоки, персики, орехи, вишню), овощи (морковь, петрушку, тыкву, лук) и цветы (астры, розы, тюльпаны и лилии). Дома размещаются по кругу, то есть первый и последний дом - соседи.
1. Они растят 12 разных растений.
2. У каждого — по четыре разных растения.
3. Каждое растение встречается, как минимум, в одном саду.
4. Только одно растение встречается сразу в четырех садах.
5. Только в одном саду — все три вида урожая.
6. Только в одном саду — все четыре разных растения одного вида урожая.
7. Персики растут только в двух соседних садах.
8. Сад Павла — в центре. Лилий там нет.
9. Тот, кто разводит астры, не выращивает овощи.
10. Любитель роз, не выращивает петрушку.
11. Садовник, у которого есть орехи, выращивает как тыкву, так и петрушку.
12. В первом саду — яблоки и вишня.
13. Вишня растет только в двух садах.
14. В саду у Александра — и лук, и вишня.
15. Алексей выращивает два разных вида фруктов.
16. Тюльпаны — только в двух садах.
17. Яблони растут только в одном единственном саде.
18. Только в одном саде, том, что рядом с садом Петра, растет петрушка.
19. Сад Александра — не крайний.
20. Иван не выращивает ни овощи, ни астры.
21. В саду Павла — три разных вида овощей.
Вопрос:
У кого какой сад, и что там растет?
Ответ:
Иван - персики, яблоки, вишня, розы
Александр - вишня, лук, розы, тюльпаны
Павел - морковь, тыква, лук, розы
Петр - астры, розы, тюльпаны, лилии
Алексей - персики, орехи, тыква, петрушка
Задача Эйнштейна (шесть измерений)
А. Эйнштейн придумал эту задачу в XIX веке и полагал, что 98% жителей Земли не в состоянии ее решить.
Условия задачи.
1. Есть 5 домов каждый разного цвета.
2. В каждом доме живет один человек, отличающийся от соседнего по национальности: немец, англичанин, швед, датчанин, норвежец.
3. Каждый пьет только один определенный напиток, курит определенную марку сигарет и держит определенное животное.
4. Никто из 5 человек не пьет одинаковые с другими напитки, не курит одинаковые сигареты и не держит одинаковое животное.
Вопрос: кому принадлежит рыба?
Подсказки:
1. Англичанин живет в красном доме.
2. Швед держит собаку.
3. Датчанин пьет чай.
4. Зеленый дом стоит слева от белого.
5. Жилец зеленого дома пьет кофе.
6. Человек, который курит Pall Mall, держит птицу.
7. Жилец из среднего дома пьет молоко.
8. Жилец из желтого дома курит Dunhill.
9. Норвежец живет в первом доме.
10. Курильщик Marlboro живет около того, кто держит кошку.
11. Человек, который держит лошадь, живет около того, кто курит Dunhill.
12. Курильщик сигарет Winfield пьет пиво.
13. Норвежец живет около голубого дома.
14. Немец курит Rothmans.
15. Курильщик Marlboro живет по соседству с человеком, который пьет воду.
Это всё, что необходимо для решения задачи.
Ответ
: Хозяин рыбы - немец.
1 В оригинале использован термин Пролога «cut», и при переводе точнее было бы применить термин «сокращение». Однако, следуя терминологии более ранних публикаций о Прологе, традиционно используется термин «отсечение».—[Error: Reference source not found, стр. 91]