Читаем Prolog полностью

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

        :- ор( 800, xfx, <===>).

        :- ор( 700, xfy, v).

        :- ор( 600, хfу, &).

        :- ор( 500, fy, ~).

Теперь правило де Моргана можно записать в виде следующего факта:

        ~(А & В)  <===>   ~А  v  ~В.

В соответствии с нашими определениями операторов этот терм понимается так, как это показано на рис. 3.9.

Рис. 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,


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


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

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

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


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

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

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

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

несколькими предопределенными

операторами

.

        +    сложение


        -    вычитание


        *    умножение


        /    деление


        mod     модуль, остаток от целочисленного деления

Перейти на страницу:

Похожие книги

C++ Primer Plus
C++ Primer Plus

C++ Primer Plus is a carefully crafted, complete tutorial on one of the most significant and widely used programming languages today. An accessible and easy-to-use self-study guide, this book is appropriate for both serious students of programming as well as developers already proficient in other languages.The sixth edition of C++ Primer Plus has been updated and expanded to cover the latest developments in C++, including a detailed look at the new C++11 standard.Author and educator Stephen Prata has created an introduction to C++ that is instructive, clear, and insightful. Fundamental programming concepts are explained along with details of the C++ language. Many short, practical examples illustrate just one or two concepts at a time, encouraging readers to master new topics by immediately putting them to use.Review questions and programming exercises at the end of each chapter help readers zero in on the most critical information and digest the most difficult concepts.In C++ Primer Plus, you'll find depth, breadth, and a variety of teaching techniques and tools to enhance your learning:• A new detailed chapter on the changes and additional capabilities introduced in the C++11 standard• Complete, integrated discussion of both basic C language and additional C++ features• Clear guidance about when and why to use a feature• Hands-on learning with concise and simple examples that develop your understanding a concept or two at a time• Hundreds of practical sample programs• Review questions and programming exercises at the end of each chapter to test your understanding• Coverage of generic C++ gives you the greatest possible flexibility• Teaches the ISO standard, including discussions of templates, the Standard Template Library, the string class, exceptions, RTTI, and namespaces

Стивен Прата

Программирование, программы, базы данных
1001 совет по обустройству компьютера
1001 совет по обустройству компьютера

В книге собраны и обобщены советы по решению различных проблем, которые рано или поздно возникают при эксплуатации как экономичных нетбуков, так и современных настольных моделей. Все приведенные рецепты опробованы на практике и разбиты по темам: аппаратные средства персональных компьютеров, компьютерные сети и подключение к Интернету, установка, настройка и ремонт ОС Windows, работа в Интернете, защита от вирусов. Рассмотрены не только готовые решения внезапно возникающих проблем, но и ответы на многие вопросы, которые возникают еще до покупки компьютера. Приведен необходимый минимум технических сведений, позволяющий принять осознанное решение.Компакт-диск прилагается только к печатному изданию книги.

Юрий Всеволодович Ревич

Программирование, программы, базы данных / Интернет / Компьютерное «железо» / ОС и Сети / Программное обеспечение / Книги по IT