Cтраница 1
Стандартный Пролог позволяет оформлять такого рода механизмы в виде процедур метауровня. [1]
Версия Турбо-Пролог значительно отличается от стандартного Пролога. Отличия прежде всего касаются наличия в нем встроенных средств типизации данных и большей структурированности исходных текстов программ. В структуре программы выделяются декларативные секции, например типов данных, определяемых пользователем. В данной версии поддерживаются различные типы данных: символы, целые и действительные числа, строки, составные символы и файлы. Кроме того, Турбо-Пролог обладает и другими достоинствами: мощной инструментальной поддержкой, быстрым компилятором, дающим эффективный машинный код, встроенными средствами организации многооконного режима, графикой высокого разрешения, низкоуровневыми средствами доступа к данным, широким набором математических функций. Однако и этому языку будущего свойствен ряд недостатков и наиболее серьезный из них - невозможность динамического изменения базы знаний, что является следствием типизации данных: введение новых предложений пользователем требует перекомпиляции программы. [2]
Когда приведенные выше грамматические правила с аргументами преобразуются в утверждения стандартного Пролога, два дополнительных аргумента добавляются к ним в качестве двух последних из трех. [3]
При загрузке программы в Пролог-систему утверждения с функтором - - преобразуются в утверждения стандартного Пролога. Пролога, заголовок которого соответствует левой части грамматического правила, а тело состоит из символов правой части, представляющих собой соединенные подцели. Правило Пролога снабжается двумя аргументами. Первый аргумент заголовка правила представляет анализируемую цепочку. Он передается в качестве первого аргумента первой подцели. В каждой подцели первый аргумент представляет цепочку, оставленную неразобранной предыдущими подцелями, а второй аргумент - остаток этой цепочки после ее разбора данным компонентом. Второй аргумент заголовка правила - это цепочка, которая остается после того, как будет согласована последняя подцель. [4]
Важно отметить, что любой предикат может быть обработан указанным способом. Стандартный Пролог содержит два элемента - и call, которые не могут быть выполнены в Турбо Прологе. [5]
В стандартном Прологе выполняемая программа имеет возможность собирать выражение из битов и фрагментов, используя операции работы со списками Пролога. Это выражение может быть исполнено, как будто бы оно было частью кода программы. Цель, используемая подобным образом, и называется динамической. [6]
Несмотря на то, что в книге используется Турбо Пролог, вы можете работать и с другими версиями Пролога. В отличие от стандартного Пролога Турбо Пролог имеет несколько встроенных функций, которые дают программисту возможность максимально задействовать графику, звук, память, порты ввода-вывода и т.п. IBM PC. Другие версии Пролога не имеют этих свойств. В Турбо Прологе, однако, отсутствуют некоторые новейшие свойства, в частности способность рассматривать правила как данные, способность сопоставлять имя предиката с переменной. Впрочем, в книге мы не рассматриваем ни новейших, ни низкоуровневых ( машинных) свойств Турбо Пролога. Та-ким образом, все описанные здесь программы должны ра-ботать почти на любой версии Пролога. [7]
Наиболее сложным при оценке реляционных выражений является случай, когда алгебраические выражения находятся по обе стороны центрального оператора. Наилучший способ, который используется в стандартном Прологе, разительно отличается от методов Турбо Пролога. В стандартном Прологе нам необходимо представить алгебраическое выражение в виде дерева выражений списковой формы и с его помощью создать последовательность динамических целей, которые, выполнив арифметические действия, преобразуют алгебраическое выражение в число. [8]
Наиболее сложным при оценке реляционных выражений является случай, когда алгебраические выражения находятся по обе стороны центрального оператора. Наилучший способ, который используется в стандартном Прологе, разительно отличается от методов Турбо Пролога. В стандартном Прологе нам необходимо представить алгебраическое выражение в виде дерева выражений списковой формы и с его помощью создать последовательность динамических целей, которые, выполнив арифметические действия, преобразуют алгебраическое выражение в число. [9]
Вторая программа является более краткой, чем первая, однако ее общее действие, возможно, менее понятно. Она оказывается к тому же более эффективной, поскольку в ней не требуется строить промежуточный список y ( A B C D E), состоящий из всех различных элементов. Поведения двух полученных алгоритмов ( программа 1, стандартный Пролог) и ( программа 2, стандартный Пролог) совершенно отличаются друг от друга несмотря на то, что они обладают общей управляющей компонентой. [10]
Арсенал систем программирования на Прологе небогат. Наибольшую известность получили системы TurboProlog 1.0 и 2.0 для IBM PC в среде MS-DOS, выпущенные компанией Borland International в конце 80 - х годов. В целях повышения эффективности объектного кода входной язык этих систем значительно отличается от стандартного Пролога ( DEC-10), в частности, необходимостью описания предикатов, так что этот язык следует считать самостоятельным языком логического программирования, поэтому использование этих систем при проведении практикума нежелательно. [11]
Вторая программа является более краткой, чем первая, однако ее общее действие, возможно, менее понятно. Она оказывается к тому же более эффективной, поскольку в ней не требуется строить промежуточный список y ( A B C D E), состоящий из всех различных элементов. Поведения двух полученных алгоритмов ( программа 1, стандартный Пролог) и ( программа 2, стандартный Пролог) совершенно отличаются друг от друга несмотря на то, что они обладают общей управляющей компонентой. [12]
Элементы макропрограммы, связанные с возможной оптимизацией объектного кода, опущены. INCLUDE препроцессора, параметры к которым задаются с помощью макрооператоров присваивания. Первым макровызовом в макропрограмме всегда является макровызов % INCLUDE PROLOG, с помощью которого объявляются все препроцессорные переменные и который также содержит стандартный пролог для любой программы на РЯОД. [13]
Расширение грамматики с целью распознавания большего числа русских глаголов быстро приведет к непомерному ее росту ввиду того, что для каждой формы каждого глагола придется заводить свое собственное правило. Этого можно избежать, включив в правые части грамматических правил вызовы обычных процедур Пролога. Суть заключается в том, что в единственном грамматическом правиле описывается общая форма глагола, а все особые глаголы и их формы задаются в виде утверждений стандартного Пролога в отдельном словаре. [14]