ВУЗ:
быстрее", а правило – некое общее свойство. Заметим, что факт "кролик двигается быстрее улитки", хотя и не высказан явно,
является следствием двух фактов, объединенных в соответствии с существующим правилом.
Большинство реализаций языка Prolog разработано для интерактивного применения. В этом смысле задача программи-
ста – разработать совокупность фактов и правил, которые образуют множество исходных высказываний, используемых за-
тем в дедуктивной системе. Установив такую совокупность высказываний, можно ввести с клавиатуры предложение (назы-
ваемое в терминологии языка Prolog целью), которое система должна проверить. Как только перед дедуктивной системой
языка Prolog будет поставлена некоторая цель, она применит операцию резолюции, пытаясь найти подтверждение того, что
указанная цель следует из исходных высказываний. С помощью нашего набора высказываний, описывающих отношение
faster, приведенные ниже предложения
faster(turtle, snail).
faster(rabbit, turtle).
faster(rabbit, snail).
будут подтверждены, поскольку каждое из них является логическим следствием исходных высказываний. Первые два факта
идентичны фактам, приведенным в исходных высказываниях, а третий является результатом дедукции.
Более интересные результаты получаются, если в задачах используются не константы, а переменные. В этих случаях
программа на языке Prolog пытается вывести цель из исходных высказываний, отслеживая требуемые унификации. Затем,
если цель достигнута, программа указывает эти унификации. Например, рассмотрим цель
faster(W, snail).
В результате программа сообщает
faster(turtle, snail).
Действительно, это – следствие исходных высказываний, которое согласуется с поставленной целью с помощью уни-
фикации. Далее, если мы попросим программу сообщить нам больше фактов, она найдет и выведет на печать следующее
следствие:
faster(rabbit, snail).
И наоборот, мы можем попросить программу найти примеры животных, которые более медлительны, чем кролик, поставив
программе цель
faster(rabbit, W).
Поэтому, если мы поставим задачу
faster{V, W),
то программа в конце концов найдет все отношения faster, которые могут быть выведены из исходных высказываний.
Таким образом, единственная программа на языке Prolog может быть использована для подтверждения, что одно конкретное
животное быстрее другого; для поиска всех тех животных, которые быстрее указанного животного; для поиска животных,
которые медленнее указанного животного; а также для поиска всех отношений "быстрее/медленнее" между животными. По-
добная гибкость просто захватывает воображение специалистов в области компьютерных наук.
Вопросы для самопроверки
1. Какие из высказываний R, S, T, U и V являются логическим следствием совокупности высказываний (¬R OR T OR S),
(¬S OR V), (¬V OR R), (U OR S), (T OR ¬U) и (S OR V)?
2. Является ли следующая совокупность высказываний непротиворечивой? Обоснуйте свой ответ.
Р OR Q OR R; ¬R OR Q; R OR ¬P; ¬Q.
3. Предположим, что программа на языке Prolog состоит из операторов, выражающих отношение "экономнее" (thriftier):
thriftier(carol, john).
thriftier(bill, sue).
thriftier(sue, carol).
thriftier(X,Z) :- thriftier(x, Y), thriftier(Y,Z).
Перечислите результаты, которые можно получить для каждой из следующих целей:
а) thriftier (sue, V);
б) thriftier(U, carol);
в) thriftier(U, V).
Упражнения
(Упражнения, отмеченные звездочкой, относятся к разделам для дополнительного чтения.)
1. Что означает высказывание "язык программирования является машинно-независимым"?
2. Переведите следующую программу с псевдокода на машинный язык, описанный в приложении В.
x ← 0;
while (х ≠ З) do
(x ← x+1)
3. Переведите приведенный ниже оператор на машинный язык, описанный в приложении В, предполагая, что перемен-
ные Length, Width и Halfway представлены как числа с плавающей точкой:
Halfway ← Length + Width
4. Переведите следующий оператор языка высокого уровня на машинный язык, описанный в приложении В, предпола-
гая, что числа W, X, Y и Z представлены в двоичном коде и занимают в основной памяти один байт:
if(X equals 0)
Страницы
- « первая
- ‹ предыдущая
- …
- 135
- 136
- 137
- 138
- 139
- …
- следующая ›
- последняя »