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