Назад | Содержание| Вперёд 3. 3. Операторная запись(нотация) В ма...

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

3. 3.    Операторная запись(нотация)

В математике мы привыкли записывать выраженияв таком виде:

        2*a  +  b*с

где  +  и  *  - это операторы, а   2,   а,   b,   с   - аргументы. В частности,  +  и  *  называют инфиксными операторами,поскольку они появляются между своимиаргументами. Такие выражения могут быть

представлены в виде деревьев, как этосделано на рис. 3.6, и

записаны какпрологовские термы

с

+

  и

*

 в качестве функторов:

        +( *( 2, а), *( b, с) )

Рис. 3. 9.  Интерпретациятерма ~(А  &  В)  <===> ~A  v  ~В

Подытожим:

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

В принципе, с оператором не связываются никакие действия над данными, за исключением особых случаев. Определение оператора не содержит описания каких-либо действий, оно лишь вводит новый способ записи. Операторы, как и функторы, лишь связывают компоненты в единую структуру.

Программист может вводить свои собственные операторы. Каждый оператор определяется своим именем, приоритетом и типом.

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

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

Упражнения

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

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

        :- ор( 200, xfy, и).

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

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

        Терм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,

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

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

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

Посмотреть ответ

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









Главная | В избранное | Наш E-MAIL | Добавить материал | Нашёл ошибку | Наверх