Язык программирования 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". Это связано с ограничением, на накладываемым формулой Хорна.
|