|
||||
|
Назад | Содержание| Вперёд 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 | Добавить материал | Нашёл ошибку | Наверх |
||||
|