Основы современных компьютерных технологий


Управление вычислениями - часть 2


7 Solutions

т.е. будут найдены все варианты решений, так как в запросе не задано ограничений на значения переменной X.

Наложим ограничение, например, на номер учебной группы. Для внешнего запроса

kurs_22(gr(261,X))

результатом будет:

X=student(" ПETPOB П.Р.","Программирование",5)

X=student(" ИBAHOB Б.О."."Операционные системы",5)

X=student(" СИДОPOB Т.К.", "Системы управления", 4)

X=student(" ПETPOB П. R", "Иностранный язык",4)

4 Solutions

Продемонстрируем еще один внешний запрос:

kurs_22(gr(Z,student(" ПETPOB П.Р.", X, Y)))

313

Система ответит:

Z=261,Х=Программирование, Y=5

Z=261, Х=Иностранный язык, Y=4

2 Solutions

Если теперь любой из этих запросов сделать внутренним, т.е. записать в разделе goal, откомпилировать и выполнить программу, то, кроме сообщения Press the SPACE bar, в диалоговом окне не будет результатов, так как мы не задавали предикатов вывода значений результата внутреннего запроса.

Изменим внутренний запрос:

goal


kurs_22(X),write(X)

Здесь для вывода значений переменной X после сопоставления используется системный предикат write(...). Результаты такого запроса будут помещены в диалоговое окно в виде:

gr(261 ,student(" ПETPOB П.Р.","Программирование",5))

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

gr(261 ,student(" ИBAHOB Б.О.", "Операционные системы",5))

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




Начало  Назад  Вперед



Книжный магазин