Чтение онлайн

на главную - закладки

Жанры

Неизвестно

Шрифт:

животное ( X).

Здесь первое правило позаботится о змеях: если Х - змея, то отсечение предотвратит перебор (исключая таким образом второе правило из рассмотрения), а fail вызовет неуспех. Эти два предложения можно более компактно записать в виде одного:

любит( мэри, X) :-

змея( X), !, fail;

животное ( X).

Ту

же идею можно использовать для определения отношения

различны( X, Y)

которое выполняется, если Х и Y не совпадают. При этом, однако, мы должны быть точными, потому что "различны" можно понимать по-разному:

Х и Y не совпадают буквально;

Х и Y не сопоставимы;

значения арифметических выражений Х и Y не равны.

Давайте считать в данном случае, что Х и Y различны, если они не сопоставимы. Вот способ выразить это на Прологе:

Если Х и Y сопоставимы, то

цель различны( X, Y) терпит неуспех

иначе цель различны( X, Y) успешна.

Мы снова используем сочетание отсечения и fail:

различны( X, X) :- !, fail.

различны( X, Y).

То же самое можно записать и в виде одного предложения:

различны( X, Y) :-

Х = Y, !, fail;

true.

Здесь true– цель, которая всегда успешна.

Эти примеры показывают, что полезно иметь унарный предикат "not" (не), такой, что

nоt( Цель)

истинна, если Цель не истинна. Определим теперь отношение not следующим образом:

Если Цель успешна, то not( Цель) неуспешна,

иначе not( Цель) успешна.

Это определение может быть записано на Прологе так:

not( Р) :-

P, !, fail;

true.

Начиная с этого момента мы будем предполагать, что not– это встроенная прологовская процедура, которая ведет себя так, как это только что было определено. Будем также предполагать, что оператор not определен как префиксный, так что цель

not( змея( X) )

можно записывать и как

not змея( X)

Многие версии Пролога поддерживают такую запись. Если же приходится иметь дело с версией, в которой нет встроенного оператора not,

его всегда можно определить самим.

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

Тем не менее not– полезное средство, и его часто можно с выгодой применять вместо отсечения. Наши два примера можно переписать с not:

любит( мэри, X) :-

животное ( X),

not змея( X).

различны( X, Y) :-

not( Х = Y).

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

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

класс( X, боец) :-

победил( X, _ ),

победил( _, X).

класс( X, победитель) :-

победил( X, _ ),

not победил( _, X).

класс( X, спортсмен) :-

not победил( X, _ ).

В качестве еще одного примера использования not рассмотрим еще раз программу 1 для решения задачи о восьми ферзях из предыдущей главы (рис. 4.7). Мы определили там отношение небьет между некоторым ферзем и остальными ферзями. Это отношение можно определить также и как отрицание отношения "бьет". На рис. 5.3 приводится соответствующим образом измененная программа.

Упражнения

5. 4. Даны два списка Кандидаты и Исключенные, напишите последовательность целей (используя принадлежит и not), которая, при помощи перебора, найдет все элементы списка Кандидаты, не входящие в список Исключенные.

Посмотреть ответ

5.5. Определите отношение, выполняющее вычитание множеств:

решение( [ ]).

Поделиться:
Популярные книги

Глинглокский лев. (Трилогия)

Степной Аркадий
90. В одном томе
Фантастика:
фэнтези
9.18
рейтинг книги
Глинглокский лев. (Трилогия)

Хрупкое равновесие

Шерри Ана
Любовные романы:
5.00
рейтинг книги
Хрупкое равновесие

Поход

Валериев Игорь
4. Ермак
Фантастика:
боевая фантастика
альтернативная история
6.25
рейтинг книги
Поход

"Фантастика 2024-186". Компиляция. Книги 1-25

Кретов Владимир Владимирович
Фантастика 2024. Компиляция
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Фантастика 2024-186. Компиляция. Книги 1-25

Граф в законе (сборник)

Смирнов Владимир
Терра - детектив
Детективы:
криминальные детективы
5.00
рейтинг книги
Граф в законе (сборник)

МИФЫ. Великолепный МИФ (сборник)

Асприн Роберт Линн
Мифология
Фантастика:
юмористическое фэнтези
8.76
рейтинг книги
МИФЫ. Великолепный МИФ (сборник)

Самурай. Трилогия

Оловянная Ирина
Фантастика:
боевая фантастика
8.74
рейтинг книги
Самурай. Трилогия

Владыка башни

Райан Энтони
2. Тень ворона
Фантастика:
фэнтези
7.57
рейтинг книги
Владыка башни

Дважды одаренный. Том VII

Тарс Элиан
7. Дважды одаренный
Фантастика:
аниме
фэнтези
попаданцы
5.40
рейтинг книги
Дважды одаренный. Том VII

Газлайтер. Том 3

Володин Григорий Григорьевич
3. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 3

Испытание. По зову сердца

Алексеев Николай Иванович
Проза:
военная проза
6.25
рейтинг книги
Испытание. По зову сердца

Сказки

Уайльд Оскар
1986. Антология детской литературы
Детские:
сказки
5.00
рейтинг книги
Сказки

Бояръ-Аниме. Газлайтер. Том 34

Володин Григорий Григорьевич
34. История Телепата
Фантастика:
фэнтези
боевая фантастика
аниме
7.00
рейтинг книги
Бояръ-Аниме. Газлайтер. Том 34

100 великих династий

Жадько Елена Григорьевна
100 великих
Справочная литература:
энциклопедии
6.25
рейтинг книги
100 великих династий