Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Конспект по ЯП_Гайденрайх.doc
Скачиваний:
23
Добавлен:
16.03.2015
Размер:
533.5 Кб
Скачать

Язык программирования пролог. Занятие 10.

Как уже отмечалось, язык Пролог был создан во французском городе Марселе. Целью было создание языка, который мог бы делать логические заключения на основе заданного текста. Название Prolog является сокращением от "Programming in logic". Главными разработчиками являются Ковальский и Кольмрауэр.

Перед этим Ковальский работал над программой на Фортране, предназначенной для доказательства теорем. Эта программа должна была обрабатывать фразы на естественном языке. Первая реализация языка Пролога с использованием компилятора Вирта ALGOL-W была закончена в 1972 г., а основы современного языка были заложены в 1973 г.

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

Разновидидности реализаций Пролога

  • PrologD

  • GnuProlog

  • Edinburgh Prolog

  • Turbo Prolog

  • Visual Prolog

  • Ic- Prolog swi- Prolog

  • Ovintus

  • SICStus

  • Iso Prolog

  • Parallel Prolog

  • Parlog

Программа на языке Пролог состоит из предложений (выражений). Предложения строятся из атомарных элементов – переменных и констант, а также термов. Для обозначения переменных и в GNU Prolog используются латинские буквы и цифры, начиная с заглавной латинской буквы. В некоторых реализациях допускается использование особой безымянной переменной, обозначаемой символом подчеркивания _. Константы обозначаются с помощью латинских букв и цифр. Пролог-Д для этих же целей помимо латинских позволяет использовать русские буквы. В качестве констант большинство реализаций Пролога допускает также использование чисел.

Терм определяется рекурсивно:

1) Константы и переменные – термы; 2) Термами также являются составные конструкции, содержащие имя функтора и последовательность из одного или более заключенных в скобки аргументов, также являющихся термами. Функтор задается своим именем и арностью - количеством аргументов.

Примеры термов:

Петя – простой терм, состоящий из одной константы петя J(0) – терм с арностью 1 с функтором J и аргументом константой 0 Горячий (молоко) – терм с функтором Горячий арности 1 и аргументом молоко Имя (Ваня, Коля) – терм с функтором Имя арности 2 и аргументами Ваня и Коля – терм с функтором List арности 2 с первым аргументом константой a и вторым аргументом – составным термом li арности 2 и аргументами b и n.

Предикаты Предикат – функция, имеющая значение 0, 1;True, False; и т.д.

Мужчина (Коля). Супруги (Вася, Соня). – бинарные предикаты плюс (3,2,5). %

У пролога и Лиспа много общего: 1) они оба хорошо подходят для обработки символьных данных; 2) имеют мощные средства обработки списков; 3) активно применяется рекурсия; 4) отсутствует разрушающее присваивание; 5) активно используются при написании интеллектуальных систем

Отличия:

1) В лиспе мы отталкиваемся от понятия функции, у которой с одной стороны есть аргументы (вход), а с другой стороны результат (выход) и всегда используется направление аргументы  результат. 2) В лиспе путь получения результат чётко задан, в прологе же порядок вывода фактов не детерминирован и система даже сама ищет ответ на вопрос.

Примеры программ на прологе:

нравится (маша, мороженное). нравится (Максим, Хоккей). нравится (Лариса, сериалы). нравится (Вася, Лариса). нравится (Х, Доллар).

NB! Фактически программа на прологе из фактов и есть база данных.

родитель (Вася, Коля). мужчина (Вася). женщина (Маша). родитель (Маша, Лида). родитель (Андрей, Лида). мужчина (Андрей). женщина (Настя). родитель (Настя, Женя).

% - правило вывода

Мама (х,у):- родитель (х,у), женщина (х). папа (х,у):- рдитель (х,у), мужчина (х). ? мама (Настя, у). у=Женя ? папа (Андрей, х). х=Лида.

Помимо баз данных, можно писать базы знаний.

Дед(х,у):- папа(x,z), родитель (z,y). сын (х, _):- мужчина(х), родитель (_ ,х). сын (х,у):- мужчина(х), родитель (y ,х).

Предок (х,у):-родитель (х,у). Предок (х,z):-родитель (х,у), предок (y,z).

Обработка списков в программах на Прологе

[a,b,c,d] – список [ ] – пустой список [x|y] – голова и хваост списка [1,[2],[3,4,[5]],7,0] [a,2,c,11] – элементы списка могут быть разного типа [x,y|xs]