Другие языки логического программирования

Пролог не единственный язык логического программирования. Кроме него существует ряд других языков, не получивших такого широкого признания в кругах программистов. Рассмотрим два таких языка.

 

Язык логического программирования KL0.

KL0 (от англ. “kernel-language version 0” – ядро-язык версии 0) – язык, в основу которого положено расширение языка логического программирования Пролог. Среди особенностей, новых в KL0 по отношению к Прологу, можно выделить:

· более гибкую структуру управления.

· многопроцессовость

· операции с побочным эффектом

· машинно-ориентированные операции.

К наиболее существенным механизмам Пролога, не поддерживаемым в KL0, относятся:

· средства управления базой данных

· средства управления таблицей имён.

Так как KL0 мало, чем отличается от Пролога, ограничимся лишь рассмотрением типов данных.

Типы данных KL0.

Рассмотрим в общих чертах некоторые базовые типы данных языка. К ним относятся символы, целые и действительные числа, строки и др.

Символы в основном предназначены для представления символьных атомов Пролога и, как правило, никак не связаны ни со строками символов, используемыми для текстуального представления программ, ни с определениями предикатов, в которых символы задают имена предикатов. Такие атрибуты при необходимости могут быть приписаны символам средствами ESP[1] . KL0 более прост и не поддерживает подобных механизмов. В этом отношении он только обеспечивает структуры данных прямого доступа и стандартную функцию хеширования для доступа к определениям атрибутов в хеш-таблице. Символы в KL0 можно проверять только на идентичность.

Целые и действительные числа введены для эффективного выполнения арифметических операций. Арифметические операции в KL0 не обладают свойством двойственности: сложение и вычитание, здесь различные предикаты. Аппаратно поддерживаются только числа фиксированной длины, определяемой разрядной сеткой. Целые числа произвольной длины (bignums), действительные числа произвольной точности и, возможно, рациональные числа могут быть реализованы с помощью обработчика исключений. Исключение возбуждается, если операндами встроенных арифметических предикатов (машинных инструкций в традиционном смысле) являются, например, нечисловые данные. Обработчик исключения может проверить аргументы и, если они соответствуют ожидаемым, выполнить предписанные операции; в противном случае вызывается обработчик ошибок. После обработки исключения дальнейшее выполнение программы может быть возобновлено.

Строки представляются одномерными массивами небольших положительных целых. Размер элементов массива зависит от диапазона значений элементов строки и может изменяться от одной строки к другой. Для представления битовых массивов, используемых для хранения образов графических изображений в памяти, введены строки с однобитовыми элементами. Для представления символов в коде ASCII используются строки с размером элемента 8 бит.

Язык программирования ShapeUp.

 

ShapeUp - ещё один язык логического программирования, в основу которого положен Пролог, расширенный средствами сопоставления строк.

В ShapeUp образцы строк рассматриваются так же, как и термы Пролога, и их сопоставление возложено на процесс унификацию. Таким образом, программы на ShapeUp значительно проще, чем аналогичные программы на Прологе, их легче писать и понимать. Сокращается значительно и размер программ.

Прологу присущи недетерминированность и сопоставление с образцом. Эти свойства очень полезны для разработки систем обработки информационных знаний. К таким системам можно отнести системы понимания естественного языка и другие системы интеллектуальной обработки текстов. Для подобных приложений очень важна операция сопоставления строк. Однако механизм сопоставления с образцом в таком виде, как он существует в Прологе, недостаточен для сопоставления строк. Причина заключена в “терм-терм” механизме сопоставления. ShapeUp – попытка разработать более практический, свободный от присущего Прологу недостатка инструмент программирования. Характерной чертой ShapeUp, отличающей его от традиционных Пролог-систем, является выполняемая при унификации функция сопоставления строк. В ShapeUp включено несколько операторов сопоставления строк. Язык позволяет конструировать образцы строк, представляемые как термы Пролога. Образцы могут унифицироваться с различными строковыми объектами: расширена унификация для выполнения сопоставления строк. В результате ShapeUp-программы проще и имеют более прозрачную семантику, их легче писать.

Список языков логического программирования можно продолжать ещё долго. Кроме перечисленных выше, к языкам логического программирования относятся также: Дейталог, LogLisp и множество других. Но хотелось бы ещё остановиться на таком языке, как Лисп (от англ. Lisp – list processing – обработка списков).

Глава 2. Lisp – язык функционального программирования.

 

Дело в том, что кроме функционального программирования (которое является основным в Лиспе) в этом языке можно использовать программирование, основанное на обычном последовательном исполнении операторов с присваиваниями, передачами управления и специальными операторами цикла. С помощью макропрограммирования можно запрограммировать новые структуры языка или реализовать совершенно новые языки. Кроме того, в Лиспе можно применять множество методов программирования, известных из традиционных языков. В зависимости от системы в Лиспе можно использовать методы программирования более высокого уровня, например такие, как объектно-ориентированное программирование, ситуационное программирование, продукционное программирование и логическое программирование. Именно на последнем методе мы и остановимся.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: