Учебное пособие: Язык логического программирования Visual Prolog

book(title, pages)

written_by(author, title)

long_novel (title)

clauses

written_by(fleming, "DR NO").

written_by(melville, "MOBY DICK").

book("MOBY DICK", 250).

book("DR NO", 310).

long_novel (Title) :-

written_by(_, Title),

book(Title, Length),

Length > 300.

Рис. 1. Листинг программы ch04e01.pro

Пытаясь выполнить целевое утверждение written_by(X, Y), VisualProlog должен проверить каждое предложение written_by(X, Y) в программе. Сопоставляя аргументы X и Yс аргументами каждого предложения written_by, VisualProlog выполняет поиск от начала программы до ее конца. Обнаружив предложение, соответствующее целевому утверждению, VisualProlog присваивает значения свободным переменным таким образом, что целевое утверждение и предложение становятся идентичными. Говорят, что целевое утверждение унифицируется с предложением. Такая операция сопоставления называется унификацией.

Поскольку X и Yявляются свободными переменными в целевом утверждении, а свободная переменная может быть унифицирована с любым другим аргументом (и даже с другой свободной переменной), то целевое утверждение может быть унифицировано с первым предложением written_by в программе, как показано ниже:

written_by (X,Y).

¯¯

written_by(fleming,"DR NO").

VisualProlog устанавливает соответствие, X становится связанным с fleming, aY – “drno”. В этот момент VisualProlog напечатает:

X=fleming, Y="DR NO"

Поскольку TestGoal ищет все решения для заданной цели, целевое утверждение также будет унифицировано и со вторым предложением written_by:

written_by(melville, "MOBY DICK").

TestGoal печатает второе решение:

X=melville, Y="MOBY DICK"

2 Solutions

Рассмотрим, как VisualProlog выполнит следующее целевое утверждение:

long_novel(X).

Когда VisualProlog пытается выполнить целевое утверждение, он проверяет, действительно ли обращение может соответствовать факту или заголовку правила. В нашем случае устанавливается соответствие с

long_novel(Title)

К-во Просмотров: 396
Бесплатно скачать Учебное пособие: Язык логического программирования Visual Prolog