?-   отвратительная.

        no

        ?-  assert( солнечно).

        yes

        ?-  необычная.

        yes

        ?-  retract( дождь).

        уes

        ?-  хорошая.

        yes

Добавлять и удалять можно предложения любой формы. Следующий пример показывает, что, кроме того, retract может работать недетерминировано: используя механизм возвратов с помощью только одной цели retract можно удалить целое множество предложений. Предположим, что в программе, с которой мы 'консультируемся', есть такие факты:

        быстр( энн).

        медл( том).

        медл( пат).

К этой программе можно добавить правило:

        ?-  assert(

                         ( быстрее( X, Y) :-

                              быстр( X), медл( Y) ) ).

        yes

        ?-  быстрее( А, В).

        А = энн

        В = том

        ?-  retract( медл( X) ).

        Х = том;

        X = пат;

        nо

        ?-  быстрее( энн, _ ).

        nо

Заметьте, что при добавлении нового правила синтаксис требует, чтобы оно (как аргумент assert) было заключено в скобки.

При добавлении нового предложения может возникнуть желание указать, на какое место в

базе

данных его следует поместить. Такую возможность обеспечивают предикаты

asserta

и

assertz

. Цель

        asserta( С)

помещает С в начале базы данных. Цель

        assertz( С)

- в конце. Вот пример, иллюстрирующий работу этих предикатов:

        ?-  assеrt( р( a)), assertz( р( b) ), asserta( p( c) ).

        yes

        ?-  p( X).

        Х = с;

        Х = а;

        Х = b

Между consult и assertz существует связь. Обращение к файлу при помощи consult можно в терминах assertz определить так: считать все термы (предложения) файла и добавить их в конец базы данных.

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

0

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

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