его часто можно с выгодой применять вместо отсечения. Наши два примера можно переписать с 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.    Определите отношение, выполняющее вычитание множеств:

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

        решение( [X/Y | Остальные] ) :-

                решение( Остальные),

                принадлежит( Y, [1, 2, 3, 4, 5, 6, 7, 8] ),

                not бьет( X/Y, Остальные).

        бьет( X/Y, Остальные) :-

                принадлежит( X1/Y1, Остальные),

                ( Y1 = Y;

                        Y1 is Y + X1 - X;

                        Y1 is Y - X1 + X ).

        принадлежит( А, [А | L] ).

        принадлежит( А, [В | L] ) :-

                принадлежит( А, L).

        % Шаблон решения

        шаблон( [1/Y1, 2/Y2, 3/Y3, 4/Y4, 5/Y5, 6/Y6, 7/Y7, 8/Y8]).

Вы читаете Prolog
Добавить отзыв
ВСЕ ОТЗЫВЫ О КНИГЕ В ИЗБРАННОЕ

0

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

Отметить Добавить цитату