Программирование на языке Пролог для искусственного интеллекта | страница 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. Арифметические действия
Пролог рассчитан главным образом на обработку символьной информации, при которой потребность в арифметических вычислениях относительно мала. Поэтому и средства для таких вычислений довольно просты. Для осуществления основных арифметических действий можно воспользоваться несколькими предопределенными операторами.