Скачать бесплатно книги - программирование.

Скачать бесплатно книги - программирование.


загрузка...






Программирование

Программирование

Книги, статьи, руководства и примеры

Автор: Дегтярев Михаил.

Язык программирования Prolog (Пролог).

Язык программирования Prolog является одним из ведущих логических языков программирования. Он был создан Аленом Колмерье (Alain Colmerauer) в 1970-х годах. Это была попытка сделать язык программирования для начинающих, который дает возможность выразить логику, а не тщательно задавать инструкциями на экране компьютера то, что хочется получить.

Пролог используется во многих программах искусственного интеллекта, но его синтаксис и семантика очень простые и ясные (первоначальная цель заключалась в обеспечении инструментом для компьютерных неграмотных лингвистов ). Название Пролог акроним для ПРОграммирования в ЛОГике и широко известен при обучении основам программирования.

Пролог основан на исчислении предикатов (точнее первого порядка исчисления предикатов), однако он ограничен формулами Хорна. Программы Пролога эффективны для доказательства теорем в первом приближении. Основные понятия объединения, хвостовая рекурсии и отслеживание.

Типы данных

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

Атомы

Текст константы вводится с помощью атомов. Атом последовательность, состоящая из букв, цифр и подчеркивания, который начинается с буквы в нижнем регистре. Обычно, если это не буквенно-цифровые атомы, то необходимо, обрамлять их апострофами (например, '+' является атомом, + является оператором).

Числа

Большинство реализаций Prolog не делают различий между действительными и дробными числами.

Переменные

Переменные обозначаются строкой, состоящей из букв, цифр и символов подчеркивания, а начинается с буквы верхнего регистра. В среде Пролог, переменная не является контейнером, который может быть назначен (в отличие от процедурных языков программирования). Его поведение ближе к модели, которая похожа на объединения.

Так называемые анонимные переменные записываются в виде одного подчеркивание (_).

Термины

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

Список не является автономным типом данных, потому что он определяется рекурсивным построением (используя термин / 2 '.'):

atom[] - пустой список

Для удобства программиста, списки могут быть построены и разрушены в разному.

Если L является списком и X является элементом, то '.' (X, L) является членом списка. Первый элемент X, за которым следует содержимое контекста L, синтаксически представляют как.

Для удобства программиста, списки могут быть построены и уничтожены в разному.

Элемент перечисление: [abc, 1, f(x), Y, g(A,rst)]
Предварение одного элемента: [abc | L1]
Предварение несколько элементов: [abc, 1, f(x) | L2]
Расширение термина: '.'(abc, '.'(1, '.'(f(x), '.'(Y, '.'(g(A,rst), [])))))

Строки

Строки обычно записывается как последовательность символов в кавычках. Они часто представлены в виде списков кодов символов таблицы ASCII.

Факты

Программирование на языке ПРОЛОГ сильно отличается от работы с процедурными языками. В Прологе Вы работаете с базами данных из фактов и правил, вы можете выполнять запросы к базе данных. Основной единицей Пролог является предикат, который определен, чтобы быть правдой (true). Предикат состоит из головы и числа аргументов. Например:

cat(tom).

Здесь "cat" это голова, и "tom" является аргументом. Вот некоторые примеры запросов вы можете выполнить с помощью транслятора Пролог на основе этого факта:

?- cat(tom).
yes.

?- cat(X).
X = tom;
no.


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

father(sally,pat).
father(pat,sally).


"father" в обоих случаях это голова, а "sally" и "pat"- аргументы. Однако в первом случае, Салли на первом месте в списке аргументов, а на втором Пэт на и наоборот. Первый случай является примером определения в порядке Глагол Предмет и Объект, ну а во втором примере порядок следующий Глагол Объект Предмет. Поскольку Пролог не понимает по-английски, обе версии прекрасно подходят, однако, считается хорошим стилем программирования придерживаться одного стиля, называемого соглашением, в ходе написания одной программы, чтобы потом не писать что-то вроде:

father(pat,sally). father(jessica,james).

Некоторые предикаты встроены в язык, и позволяют Прологу уменьшить рутину повседневной деятельности (например, ввод / вывод с использованием графики и иного общения с операционной системой). Например, предикаты записи могут быть использованы для вывода на экран таким образом:

Write ('привет')

будет отображать слово "Hello" на экране.

Правила

Второй тип заявлений в Пролог - это правила. Пример правила:

light(on) :- switch(on).

": -" означает "если", это правило означает, light (on) верно (включен), если switch (on) это правда (иначе, если переключатель switch включен, тогда есть свет light). Правила могут также использовать переменные, переменные начинаются с большой буквы в то время как константы начинаются со строчных буквам. Например,

father(X,Y) :- parent(X,Y),male(Y).

Это означает, "если кто-то является родителем, и он мужчина, то он является отцом". Причины и следствия могут находиться и в обратном порядке, так что это не противоречит обычной логике. Можно разместить несколько предикатов в разделе следствий, объединив их вместе, например:

a,b,c :- d.

Что эквивалентно нескольким объявлениям:

a :- d. b :- d. c :- d.

Но не разрешаются инструкции вида:

a;b :- c.

, что является эквивалентом "если с, то a или b". Это связано с ограничением, на накладываемым формулой Хорна.