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

Упражнения

7. 6.   (а)         Напишите вопрос к пролог-системе, который удаляет из базы данных всю таблицу произв.

           (b)         Измените этот вопрос так, чтобы он удалил из таблицы только те строки, в которых произведение равно 0.

7. 7.        Определите отношение

        копия( Терм, Копия)

которое порождает такую копию ТермКопия, в которой все переменные переименованы. Это легко сделать, используя assert и retract.

Назад | Содержание | Вперёд

Назад | Содержание | Вперёд

7. 5.    Средства управления

К настоящему моменту мы познакомились с большинством дополнительных средств управления, за исключением repeat (повторение). Здесь мы для полноты приводим список всех таких средств.

отсечение, записывается как  '!',   предотвращает перебор, введено в гл. 5.

fail - цель, которая всегда терпит неудачу.

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

not( P) - вид отрицания, который всегда ведет себя в точном соответствии со следующим определением:

        not( P) :- P,  !,  fail;   true.

Некоторые проблемы, связанные с отсечением и not детально обсуждались в гл. 5.

саll( P) активизирует цель Р. Обращение к саll имеет успех, если имеет успех Р.

repeat - цель, которая всегда успешна. Ее особое свойство состоит в том, что она недетерминирована, поэтому всякий раз, как до нее доходит перебор, она порождает новую ветвь вычислений. Цель repeat ведет себя так, как если бы она была определена следующим образом:

        repeat.

        repeat :- repeat.

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

        квадраты :-

                repeat,

                read( X),

                ( X = стоп,  !;

                  Y   is  X*X,  write( Y),  fail ).

Назад | Содержание | Вперёд

Назад | Содержание | Вперёд

7. 6.    bagof , setof  и findall

При помощи механизма автоматического перебора можно получить одни за другим все объекты, удовлетворяющие некоторой цели. Всякий раз, как порождается новое решение, предыдущее пропадает и становится с этого момента

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

0

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

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