Программирование на языке Пролог для искусственного интеллекта | страница 57



• Номер приоритета — это целое число из некоторого диапазона, скажем, между 1 и 1200. Оператор с самым больший номером приоритета соответствует главному функтору выражения, в котором этот оператор встретился. Операторы с меньшими номерами приоритетов связывают свои аргументы сильнее других операторов.

• Тип оператора зависит от двух условий: (1) его расположения относительно своих аргументов, (2) приоритета его аргументов по сравнению с его собственным. В спецификаторах, таких, как >xfy>x обозначает аргумент, чей номер приоритета строго меньше номера приоритета оператора; >y — аргумент с номером приоритета, меньшим или равным номеру приоритета оператора.

Упражнения

3.12. Если принять такие определения

>:- op( 300, xfy, играет_в).

>:- op( 200, xfy, и).

то два следующих терма представляют собой синтаксически правильные объекты:

>Tepм1 = джимми играет_в футбол и сквош

>Терм1 = сьюзан играет_в теннис и баскетбол и волейбол

Как эти термы интерпретируются пролог-системой? Каковы их главные функторы и какова их структура?

3.13. Предложите подходящее определение операторов (">работает", "", ">нашем"), чтобы можно было писать предложения типа:

>диана работает секретарем в нашем отделе.

а затем спрашивать:

>?- Кто работает секретарем в нашем отделе.

>Кто = диана


>?- диана работает Кем.

>Кем = секретарем в нашем отдела

3.14. Рассмотрим программу:

>t( 0+1, 1+0).


>t( X+0+1, X+1+0).


>t( X+1+1, Z) :-

> t( X+1, X1),

> t( X1+1, Z).

Как данная программа будет отвечать на ниже перечисленные вопросы, если '>+' — это (как обычно) инфиксный оператор типа >yfx?

(a) >?- t( 0+1, А).

(b) >?- t( 0+1+1, В).

(с) >?- t( 1+0+1+1+1, С).

(d) >?- t( D, 1+1+1+0).

3.15. В предыдущем разделе отношения между списка ми мы записывали так:

>принадлежит( Элемент, Список),

> конк( Список1, Список2, Список3),

> удалить( Элемент, Список, НовыйСписок), ...

Предположим, что более предпочтительной для нас является следующая форма записи:

>Элемент входит_в Список,

> конкатенация_списков Список1 и Список2

>  дает Список3,

> удаление_элемента Элемент из_списка Список

>  дает НовыйСписок, ...

Определите операторы ">входит_в", ">конкатенация_списков", "" и т.д. таким образом, чтобы обеспечить эту возможность. Переопределите также и соответствующие процедуры.

3.4. Арифметические действия

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