Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лекция1.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
135.17 Кб
Скачать

2. Запросы (цели)

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

Запросы (цели) могут быть простыми или сложными. Сложными называются цели, состоящие из двух или более частей. А каждая часть сложной цели – подцелью. Возможно использование конъюнктивной и дизъюнктивной формы объединения подцелей. В качестве разделителей используются знаки «,» и «;» соответственно.

Составные цели можно использовать для поиска решения, в котором:

  • обе подцели A и B истинны (конъюнкция), разделяя подцели запятой:

  • истинна либо подцель A, либо подцель B (дизъюнкция), разделяя подцели точкой с запятой.

Пример 3. (слайд 4)

  1. профессия(администратор).

  2. профессия(врач).

  3. сотрудник(Кто,жен).

Каждая из приведенных записей может быть сформулирована в разделе программы, определяющем запросы. Первая и вторая требуют ответа «да» или «нет». В соответствии с фактами, представленными в примере 1, на первый запрос получим ответ «да», а на второй – «нет». В третьем случае первый объект Кто – начинается с большой буквы, тогда как второй объект (жен) со строчной. Это объясняется тем, что жен – фиксированный, постоянный объект, известная величина, а Кто – переменная. Получив запрос о том, кто из объектов является мужчиной, Пролог ответит:

Кто = голубева.

Кто = иванова.

2 Solutions. 

3. Переменные

Переменные в Прологе всегда начинаются с заглавной буквы или символа подчеркивания. Пролог не имеет оператора присваивания, но обеспечивает связывание переменной с конкретным значением при сопоставлении с константами в фактах или правилах. Переменные в Прологе инициализируются (или конкретизируются). До инициализации переменная свободна. После получения ею значения, она становится связанной. Конкретизация переменной обеспечивает возврат искомых значений переменных по запросам.

Переменная остается связанной только то время, которое необходимо для получения решения по запросу. Затем Пролог освобождает ее и ищет другое решение.

Нельзя сохранить информацию, присвоив значение переменной. Переменные используются как часть процесса поиска решения, а не как хранилище информации.

Пример 4. (слайд 5)

Рассмотрим совокупность фактов:

увлечение(лена, чтение).

увлечение(иван, компьютеры).

увлечение(илья, баскетбол).

увлечение(леонид, баскетбол).

увлечение(юра, плавание).

увлечение(юра, чтение).

По запросу

увлечение(Кто,чтение), увлечение(Кто,плавание).

Пролог среди фактов первоначально выделяет тот, у которого второй аргумент – чтение. В результате чего переменная Person первоначально связывается со значением лена и по списку фактов ищет факт, соответствующий второй части запроса: увлечение(лена,плавание).

Поскольку такого факта нет, то Пролог освобождает переменную Person и среди фактов выделяет следующий, у которого второй аргумент – чтение, то есть увлечение(юра,чтение) и переменная Person связывается со значением юра. Далее по списку фактов ищет факт, соответствующий второй части запроса: увлечение(юра,плавание). И, поскольку данный факт имеет место, то Пролог выдает ответ:

Кто = юра

1 Solutions.

Если бы среди множества фактов имелись в наличии следующие:

увлечение(маша, плавание).

увлечение(маша, чтение).

то при соответствующих настройках проекта, Пролог, выдав решение (Кто = юра), освободил бы переменную Person, затем связал бы ее со значением маша, и, действуя аналогично, нашел бы второе решение (Кто = маша). 

Анонимные переменные

Переменные данного вида используются в том случае, когда необходимо использовать не полную, а определенную информацию из запроса, проигнорировав ненужные значения. Обозначаются такие переменные символом подчеркивания и сопоставляются с любыми данными.

Пример 5. (слайд 6)

Рассмотрим совокупность фактов:

сотрудник(голубева, жен).

сотрудник(иванова, жен).

сотрудник(васин, муж).

сотрудник(смирнов, муж).

сотрудник(азаров, муж).

На запрос

сотрудник(Кто,_).

Пролог ответит:

Кто = голубева

Кто = иванова

Кто = васин

Кто = смирнов

Кто = азаров

5 Solutions. 

Анонимные переменные могут использоваться и в фактах Пролога. Например, факты:

есть(_,нос). дышать(_).

могут быть выражены средствами естественного языка:

«У каждого есть нос». «Все дышат».