русс | укр

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

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Введение в логическое программирование


Дата добавления: 2015-09-15; просмотров: 881; Нарушение авторских прав



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

Для обозначения факта используется запись вида «Q.»– предикат, вслед за которым ставится точка. Предикаты бывают 0-местные (без аргументов) или n- местные (с n аргументами). Предикат без аргументов обозначается одним именем. Предикат с аргументами обозначается именем, вслед за которым в скобках через запятые записываются все его аргументы. Аргумент предиката– синтаксическая конструкция, называемая термом. Определение предиката в обозначениях Бэкуса-Наура:


Терм– это либо константа, либо переменная, либо структура.

Структура– более сложное, чем константа и переменная, образование, характеризуется именем (функтором) и компонентами– составными частями структуры. Каждый компонент структуры в свою очередь является термом.

Например, библейское утверждение «Авраам родил Исаака» (иначе: объект Авраам связан с объектом Исаак отношением father[1]) в терминах языка Пролог может быть записано как факт с использованием двуместного предиката[2]:

father("Авраам", "Исаак").

По аналогии: факты, представленные в Пролог-программе одноместными предикатами:

man("Адам").

woman("Ева").

можно интерпретировать как утверждения: «Адам является мужчиной» (объект Адам обладает свойством man), «Ева является женщиной» (объект Ева обладает свойством woman), соответственно. Эти же утверждения могут быть реализованы несколько иначе:

homo_sapiens(man("Адам")).

homo_sapiens(woman("Ева")).



При этом одноместный предикат homo_sapiens подчеркивает, что объекты Адам и Ева, несмотря на очевидные различия, все-таки относятся к одному и томе же биологическому виду. В приведенном примере предикаты man и woman выступают в качестве аргумента для предиката homo_sapiens.

Конечное множество фактов образуют простейший вид Пролог-программы. Такой подход лежит в основе программирования баз данных и, в принципе, уже сейчас, используя только один вид утверждений– факты, можно написать небольшую, но достаточно эффективную программу на Прологе, описывающую фрагмент генеалогического дерева одного весьма известного российского семейства (см. рис. 1). Кроме уже рассмотренных предикатов man и woman в программу для описания родственных отношений введены предикаты child[3] и pair[4].

man("Алексей Михайлович").

man("Иван V").

man("Карл-Фридрих").

man("Петр I").

man("Алексей Петрович").

man("Петр II").

man("Петр III").

man("Павел I").

man("Александр I").

man("Константин Павлович").

woman("Мария Милославская").

woman("Наталья Нарышкина").


woman("Софья").

woman("Прасковья Салтыкова").

woman("Евдокия Лопухина").

woman("Екатерина I").

woman("Анна Иоановна").

woman("Елизавета Петровна").

woman("Анна Петровна").

woman("Софья-Шарлотта").

woman("Екатерина II").

woman("Наталья Алексеевна").

woman("Мария Федоровна").

woman("Елизавета Алексеевна").

pair("Алексей Михайлович", "Мария Милославская").

pair("Алексей Михайлович", "Наталья Нарышкина").

pair("Иван V", "Прасковья Салтыкова").

pair("Петр I", "Евдокия Лопухина").

pair("Петр I", "Екатерина I").

pair("Карл-Фридрих", "Анна Петровна").

pair("Алексей Петрович", "Софья-Шарлотта").

pair("Екатерина II", "Петр III")

pair("Павел I", "Наталья Алексеевна").

pair("Павел I", "Мария Федоровна").

pair("Александр I", "Елизавета Алексеевна").

child("Софья Алексеевна", "Мария Милославская").

child("Иван V", "Мария Милославская").

child("Софья Алексеевна", "Алексей Михайлович").

child("Иван V", "Алексей Михайлович").

child("Петр I", "Алексей Михайлович").

child("Петр I", "Наталья Нарышкина").

child("Наталья Алексеевна", "Алексей Михайлович").

child("Наталья Алексеевна", "Наталья Нарышкина").

child("Анна Иоановна", "Иван V").

child("Анна Иоановна", "Прасковья Салтыкова").

child("Алексей Петрович", "Петр I").

child("Алексей Петрович", "Евдокия Лопухина").

child("Анна Петровна", "Петр I").

child("Анна Петровна", "Екатерина I").

child("Елизавета Петровна", "Петр I").

child("Елизавета Петровна", "Екатерина I").

child("Петр II", "Алексей Петрович").

child("Петр II", "Софья-Шарлотта").

child("Петр III ", "Карл-Фридрих")

child("Петр III ", "Анна Петровна")

child("Павел I", "Екатерина II").

child("Павел I", "Петр III").

child("Константин Павлович", "Павел I").

child("Константин Павлович", "Мария Федоровна").

child("Александр I", "Павел I").

child("Александр I", "Мария Федоровна").

Контрольные вопросы

1 В чем отличие языка Пролог от традиционных алгоритмических языков программирования?

2 Назовите основные конструкции логического программирования.

3 Что такое факт в логическом программировании?

4 Что такое правило в логическом программировании?



<== предыдущая лекция | следующая лекция ==>
Введение | Основные конструкции логического программирования


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.006 сек.