Главная страница
Навигация по странице:

  • Пример 1.

  • Пример 2.

  • Project


  • View

  • Пример 3

  • Лабораторный практикум пролог. Методические рекомендации по дисциплине Анализ данных


    Скачать 311.21 Kb.
    НазваниеМетодические рекомендации по дисциплине Анализ данных
    АнкорЛабораторный практикум пролог
    Дата11.03.2021
    Размер311.21 Kb.
    Формат файлаodt
    Имя файлаProlog.odt
    ТипМетодические рекомендации
    #183725
    страница4 из 10
    1   2   3   4   5   6   7   8   9   10
    Краткие теоретические сведения

    В отличие от процедурных языков, в которых программист должен точно описать процесс решения задачи, Пролог является описательным (декларативным) языком. Программа на Прологе содержит описание проблемы, для этого используются правила и факты, и цель. Выполнение программы заключается в попытке доказать целевое утверждение, используя предположения, заданные в программе. Механизм поиска решений “встроен” в Пролог, он называется “поиск с возвратом”.

    Поиск с возвратом (backtracking) - это один из основных приемов поиска решений поставленной задачи в ПРОЛОГ'е. Выполняя поиск, ПРОЛОГ может столкнуться с необходимостью выбора между альтернативными путями. Тогда он ставит маркер у места развилки (точка отката) и выбирает первую подцель. Если она не выполняется, то ПРОЛОГ возвращается в точку отката и переходит к следующей подцели.

    Пример 1.

    Рассмотрим программу, которая содержит сведения об именах и воз­расте нескольких игроков в теннисном клубе. Цель состоит в подборе пары игроков, возраст которых 9 лет.

    Решение:

    DOMAINS

    child = symbol

    age = integer

    PREDICATES

    player(child, age) /*игрок(ребенок, возраст)*/ CLAUSES

    player(peter, 9). player(paul, 10). player(chris, 9). player(susan, 9).

    Goal player(Person1,9),player(Person2,9),Person1<>Person2, write(Person1, “-“,Person2).

    На первом шаге ПРОЛОГ пытается найти решение для первой подцели player(Person1,9). Эта подцель согласуется путем сопоставления Person1 с peter, так как Пролог просматривает утверждения для согласования сверху вниз.

    После достижения первой подцели ПРОЛОГ переходит ко второй подцели: player(Person2,9). Эта подцель опять согласуется при сопоставлении Person2 с peter.

    На следующем шаге ПРОЛОГ переходит к согласованию третьей подцели: Person1<>Person2. Так как Person1 и Person2 имеют значения peter, то данная подцель не согласуется, и Пролог осуществляет откат к предыдущей подцели player(Person2,9). Эта подцель сопоставляется с фактом player(chris,9), и Person2 согласуется с crhis .Теперь Пролог опять в качестве текущей подцели выполняет цель Person1<>Person2 . Эта подцель успешна, так как peter и chris отличны. Таким образом, ПРОЛОГ согласовал все подцели целевого утверждения, и цель считается согласованной. Получена пара игроков: Peter- Chris.

    Результат выполнения программы:

    Peter - chris

    Среда Visual Prolog позволяет использовать отладчик для пошагового выполнения программы. Отладчик работает с откомпилированным кодом. В исходном коде можно ставить точки останова и выполнять программу по шагам. В режиме пошагового выполнения программы можно просматривать текущие значения переменных и содержимое утвержденных фактов.

    Пример 2.

    Имеется база данных, содержащая факты вида отдыхает(имя, город), украина(город), россия(город), прибалтика(город). Составить правило, позволяющее определить, кто отдыхал в России.

    Проследить поиск решения задачи с помощью отладчика Visual Prolog и построить целевое дерево поиска с возвратом.

    Решение:

    1. Создайте новый проект (Project | New Project) и наберите текст программы:

    DOMAINS

    имя, город= symbol

    PREDICATES

    отдыхает(имя, город) украина(город).

    россия(город). прибалтика(город).

    отдых_Россия(имя)

    CLAUSES

    отдыхает(sasha, antalia).

    отдыхает(anna, sochi).

    отдыхает(dima, urmala).

    отдыхает(oleg, kiev).

    украина(kiev).

    россия(sochi).

    Прибалтика(urmala).

    отдых Россия^)

    отдыхает(X,Y),

    россия(Y).

    GOAL

    отдых РоссияШ, write(X),nl.

    1. Сохраните проект (Project | Save Project)

    2. Запустите его на исполнение ( Project | Run, или клавиша , или кнопка ). Результат выполнения программы:

    anna

    1. Проследите поиск этого решения с помощью отладчика^еЬиддег). Для этого:

    а) запустите отладчик (Project | Debug);

    б) в окне отладчика выберите команду View | Local Variables (для просмотра текущих значений переменных);

    в) нажимайте клавишу (или Run | Trace Into) для пошагового выполнения программы, текущие значения переменных отображаются в окне Variables For Current Clause



    рис.9. Окно отладчика

    Поиск решения можно представить следующим образом:



    рис.10. Целевое дерево поиска решения

    Управление поиском с возвратом заключается в решении двух задач: включении поиска с возвратом при необходимости найти все возможные решения задачи и отключении поиска с возвратом для ограничения пространства поиска.

    Для решения этих задач используются два стандартных предиката: fail и отсечение.

    fail - это тождественно-ложный предикат, искусственно создающий ситуацию неуспеха. После выполнения этого предиката управление передается в точку отката и поиск продолжается.

    Чтобы прервать поиск решений при выполнении какого-либо условия, используется предикат отсечения (обозначается !), Однажды пройдя через отсечение, невозможно вернуться назад, т.к. этот предикат является тождественно-истинным. Процесс может только перейти к следующей подцели, если такая имеется.

    Например, p :- p1, p2, !, p3.

    Если достигнуты цели p1 и p2, то возврат к ним для поиска новых решений невозможен.

    Пример 3

    База данных содержит факты вида: stiulent(iLMH, курс). Создать проект, позволяющий сформировать список студентов 1-го курса.

    Решение:

    PREDICATES

    student(symbol,integer)

    spisok

    CLAUSES

    student(vova,3).

    student(lena,1).

    student(dima,1). student(ira,2).

    student(marina,1). spisok:-student(X,1),write(X),nl,fail.

    GOAL

    write("Сnисок студентов 1-курса"),nl,spisok.

    1   2   3   4   5   6   7   8   9   10


    написать администратору сайта