Навигация
Главная
Поиск
Форум
FAQ's
Ссылки
Карта сайта
Чат программистов

Статьи
-Delphi
-C/C++
-Turbo Pascal
-Assembler
-Java/JS
-PHP
-Perl
-DHTML
-Prolog
-GPSS
-Сайтостроительство
-CMS: PHP Fusion
-Инвестирование

Файлы
-Для программистов
-Компонеты для Delphi
-Исходники на Delphi
-Исходники на C/C++
-Книги по Delphi
-Книги по С/С++
-Книги по JAVA/JS
-Книги по Basic/VB/.NET
-Книги по PHP/MySQL
-Книги по Assembler
-PHP Fusion MOD'ы
-by Kest
Professional Download System
Реклама
Услуги

Автоматическое добавление статей на сайты на Wordpress, Joomla, DLE
Заказать продвижение сайта
Программа для рисования блок-схем
Инженерный калькулятор онлайн
Таблица сложения онлайн
Популярные статьи
OpenGL и Delphi... 65535
Форум на вашем ... 65535
21 ошибка прогр... 65535
HACK F.A.Q 65535
Бип из системно... 65535
Гостевая книга ... 65535
Invision Power ... 65535
Пример работы с... 65535
Содержание сайт... 65535
ТЕХНОЛОГИИ ДОСТ... 65535
Организация зап... 65535
Вызов хранимых ... 65535
Создание отчето... 65535
Имитационное мо... 65535
Программируемая... 65535
Эмулятор микроп... 65535
Подключение Mic... 65535
Создание потоко... 65535
Приложение «Про... 65535
Оператор выбора... 65535
Реклама
Смотрите подробности йони массаж мастер на нашем сайте
Сейчас на сайте
Гостей: 13
На сайте нет зарегистрированных пользователей

Пользователей: 13,372
новичок: vausoz
Новости
Реклама
Выполняем курсовые и лабораторные по разным языкам программирования
Подробнее - курсовые и лабораторные на заказ
Delphi, Turbo Pascal, Assembler, C, C++, C#, Visual Basic, Java, GPSS, Prolog, 3D MAX, Компас 3D
Заказать программу для Windows Mobile, Symbian

Моделирование процесса передачи данных по магистрали с основным и резерв...
Моделирование работы крупного аэропорта на GPSS + Пояснительная записка
Моделирование литейного цеха на GPSS + Пояснительная записка

5.5. Объявление операторов


Причина, по которой операторы рассматриваются в главе, посвященной вводу-выводу, состоит в том, что операторы предоставляют некоторые синтаксические удобства при чтении и записи термов. Никаких других причин для введения операторов нет. Для начала коротко напомним сказанное в разд. 2.3, а затем расскажем о том, как объявляются операторы.
Синтаксис языка разрешает использование операторов, обладающих следующими тремя свойствами: позицией, приоритетом и ассоциативностью. По занимаемой позиции операторы могут быть инфиксными, постфиксными или префиксными (оператор, имеющий два аргумента, может располагаться между аргументами; оператор с одним аргументом может находиться либо после аргумента, либо перед ним). Приоритет оператора – это некоторое целое число, диапазон изменения которого зависит от конкретной реализации Пролога. Предположим, что оно находится в диапазоне от 1 до 255 . Приоритет используется для того, чтобы придать однозначную интерпретацию выражениям в тех случаях, когда синтаксис термов не задан явно с помощью скобок. Ассоциативность необходима для придания однозначной интерпретации выражениям, в которых имеются два оператора с одинаковыми приоритетами. Оператору в языке Пролог соответствует специальный атом, который специфицирует позицию и ассоциативность оператора. Для инфиксных операторов возможны следующие спецификации:
xfx xfy yfx yfy



Чтобы понять смысл этих спецификаций, их полезно рассматривать как «образцы» возможного использования операторов. В приведенных образцах буква f представляет оператор, а х и у – аргументы. Таким образом, во всех приведенных выше образцах оператор должен находиться между двумя аргументами, т. е. он является инфиксным оператором. В соответствии с этим соглашением
fx fy



есть две спецификации для префиксных операторов (оператор записывается перед его единственным аргументом). Точно так же
xf yf



представляют возможные спецификации для постфиксных операторов. Может вызвать недоумение использование двух букв для обозначения аргументов. Использование букв х и у в той или иной позиции позволяет выразить информацию об ассоциативности оператора. В предположении, что выражение не содержит скобок, буква у указывает, что соответствующий ей аргумент может содержать операторы с приоритетом, равным приоритету данного оператора или с более низким приоритетом. Напротив, буква х указывает, что каждый оператор в соответствующем ей аргументе должен иметь строго более низкий приоритет по сравнению с приоритетом данного оператора. Рассмотрим, что это значит для оператора +, объявленного как yfx . Если имеется выражение
а + b + с



то для него возможны две следующие интерпретации:
(а + b) + с      а + (b + с)



Вторая интерпретация исключается, так как при этом аргумент, стоящий после первого вхождения +, содержит оператор с тем же самым приоритетом (второй оператор +). Это противоречит тому, что в спецификации оператора + после f стоит х .
Оператор, имеющий спецификацию yfx , является левоассоциативным. Аналогично оператор со спецификацией xfy является правоассоциативным. Если мы знаем необходимую ассоциативность объявляемого инфиксного оператора, то это значит, что однозначно определяется соответствующая оператору спецификация.
Заметим, что использование букв х и у в двух других случаях имеет тот же смысл относительно того, какие операторы могут появляться в соответствующей позиции при отсутствии скобок. Это значит, что, например, последовательность
not not a
допустима синтаксически, если оператор not объявлен как fy , и недопустима в случае, когда он объявлен как fx .
Если мы хотим объявить на Прологе оператор с заданными позицией, приоритетом и ассоциативностью таким образом, чтобы Пролог распознавал его при вводе и выводе термов, то мы используем встроенный предикат ор. Если Имя - это оператор, который мы желаем иметь (атом, который мы хотим сделать оператором), Приоритет - приоритет оператора (целое число в соответствующем диапазоне) и Спецификация - спецификация, определяющая положение и ассоциативность оператора (один из приведенных выше атомов), то такой оператор может быть объявлен с помощью выполнения следующего целевого утверждения
?- ор (Приоритет,Спецификация,Имя).
Если объявление оператора является допустимым, то эта цель будет достигнута.
В качестве примера объявления операторов далее приводится полный список базовых операторов, обсуждаемых в данной книге. Конкретные реализации Пролога могут иметь несколько отличный набор «стандартных» операторов; может потребоваться масштабирование указанных приоритетов. Однако взаимный порядок операторов в иерархии приоритетов обычно остается неизменным.
?-op(255,xfx,':-').
?-op(255,fx,'?-').
?-op(254,xfy,';').
?-op(253,xfy,',').
?-op(250,fx,spy).
?-op(250,fx,nospy).
?-op(60,fx,not).
?-op(51,xfy,'.').
?-op(40,xfx,is).
?-op(40,xfx,' =..').
?-op(40,xfx,=).
?-op(40,xfx,\=).
?-op(40,xfx,‹).
?-op(40,xfx,=‹).
?-op(40,xfx,›=).
?-op(40,xfx,›).
?-op(40,xfx, ==).
?-op(40,xfx,\==).
?-op(31,yfx,-).
?-op(31,yfx,+).
?-op(21,yfx,/).
?-op(21,yfx,*).
?-op(ll,xfx, mod).


Опубликовал Kest July 09 2009 12:43:10 · 0 Комментариев · 8941 Прочтений · Для печати

• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •


Комментарии
Нет комментариев.
Добавить комментарий
Имя:



smiley smiley smiley smiley smiley smiley smiley smiley smiley
Запретить смайлики в комментариях

Введите проверочный код:* =
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Вы не зарегистрированны?
Нажмите здесь для регистрации.

Забыли пароль?
Запросите новый здесь.
Поделиться ссылкой
Фолловь меня в Твиттере! • Смотрите канал о путешествияхКак приготовить мидии в тайланде?
Загрузки
Новые загрузки
iChat v.7.0 Final...
iComm v.6.1 - выв...
Visual Studio 200...
CodeGear RAD Stud...
Шаблон для новост...

Случайные загрузки
Функции Visual Basic
Распознавание иде...
Программирование ...
Ics
Delphi 2005. Разр...
Мод "проверочный ...
PBEditPack
MpegPlay
Карта сайта
Приложение Клиент...
PHP: Полезные приемы
Панель статистики...
Пишем программы и...
Базы данных в Инт...
SUIPack
Язык программиров...
Х. М. Дейтел, П. ...
Программирование ...
45 уроков по дельфи
DelphiX

Топ загрузок
Приложение Клие... 100793
Delphi 7 Enterp... 98016
Converter AMR<-... 20298
GPSS World Stud... 17059
Borland C++Buil... 14238
Borland Delphi ... 10373
Turbo Pascal fo... 7390
Калькулятор [Ис... 6080
Visual Studio 2... 5228
Microsoft SQL S... 3674
Случайные статьи
Программа содержи...
Методы values() и ...
Apply Group Policy...
MissingMappingAction
Настройка меню “Пуск”
Предварительные св...
Насколько она слож...
Использование стра...
КОМАНДЫ
RAID уровня 0
Модули форм
Узлы XPath
Формирование сообщ...
Акселерометры и ор...
Google и тематика ...
Разрыв страницы
14.2. Две важные ф...
Сегментные регистры
Обеспечение требуе...
Выработка решенияП...
Лучшие игры в кази...
Основная работа вы...
Когда антипаттерн ...
NetWare BinderyАут...
Внедрение решенияП...
Статистика



Друзья сайта
Программы, игры


Полезно
В какую объединенную сеть входит классовая сеть? Суммирование маршрутов Занимают ли таблицы память маршрутизатора?