Учебная работа. Реферат: Язык программирования Пролог 2
Цель работы: Изучить главные конструкции языка программирования Пролог для решения задач вычисления функций в экспертных системах.
1. Теоретические сведения
Пролог – это один из языков программирования, который обширно употребляется для сотворения баз познаний и экспертных систем. Базовыми качествами языка Пролог являются:
1) механизм вывода с поиском и возвратом;
2) интегрированный механизм сравнения с прототипом;
3) обычная и просто дифференцируемая структура данных;
4) отсутствие указателей, операторов присваивания и перехода;
5) естественность рекурсии.
Пролог базируется на сочетании обозначенных параметров, а удобство его – на естественности его принципов для логических задач, сводящихся к рекурсии.
Программки на Прологе состоит из фактов и правил для получения остальных фактов и ответов на вопросцы. Факты по определению числятся доказанными (настоящими).
Определенному применению логической программки соответствует понятие запроса (цели). Достигнуть цели – значит показать, что она логически следует из фактов и правил программки. Если вопросец содержит переменные, то система обязана отыскать к тому же определенные объекты, которые будучи подставленными заместо переменных, обеспечат достижение цели.
В алфавит языка входят последующие знаки:
1) строчные и строчные буковкы латинского алфавита (A-Z, a-z); регистр букв программки влияет на работу программки;
2) числа (0-9);
3) спецсимволы: ! @ # $ ( ) & * — + / < > ; , ? . _ » ‘
1.2 структура программки
Пролог – программка содержит в себе последующие разделы:
constants – задаются константы;
domains — имена и структуры объектов, применяемых в задачке;
predicates – наименования отношений меж объектами;
clauses – факты и правила, описывающие эти дела;
goal – описание цели решения.
Для обозначения логических связок для конъюнкции – and, для дизъюнкции – or, следование обозначаются конструкцией «:-» (двоеточие и минус) либо слово if. Комменты обрамляются комбинациями /*…*/.
1.3 Домены
Типы данных в Прологе именуют доменами. домен охарактеризовывает огромное количество значений, которые может принимать переменная предиката в процессе выполнения программки. Связывание домена с определенным аргументом (местом) предиката осуществляется в секции predicates. Сами переменные в объявлении не нуждаются. Домены разделяются на обыкновенные и структурированные, обычные и неординарные. К обычным относятся :-symbol – символьная константа (имя), имеет две формы записи:
1) последовательность букв, цифр и символов препинания, которая начинается со строчной буковкы;
2) последовательность знаков, заключенная в двойные кавычки (примеры: «apple», «person», «Студент Иванов С.В.» ) ;
-string – строчка знаков (неважно какая последовательность знаков, заключенная в двойные кавычки).
-char – отдельный знак меж апострофами.
-integer – целое число (в спектре –32768 до 32767).
-real – действительное число (пример: -34.567, 0.654, 9.76e+3).
Переменная с именованием <<_>> (анонимная) употребляется, если идет о всех книжках, написанных неким <<переменным>> создателем, при этом пропущенные наименования, издательство, пространство и год рождения роли не играют.
Объявление новейших доменов с исползованием обычных имеет вид
<имя> = <имя_стандартного_домена>
Примеры объявлений:
domains
a=integer
fax=symbol
r, dup=real
Введение авторских наименований доменов дозволяет внести в программку больше семантики и обеспечивает контроль типов значений переменных, так как соединять в процессе выполнения программки переменные формально разных типов (доменов) недозволено. В Прологе допускается внедрение структуры, состоящей из нескольких обычных либо сложных объектов, к примеру:
domains
articles=book(title,author)
author=author(init,fam)
title, author, fam=symbol
init=string
1.4 Предикаты
Раздел predicates должен содержать полный список предикатов юзера, используемых в программке. Описание предиката включает <имя предиката> и <перечень доменов его аргументов>:
<имя предиката> (<d1>,<d2>,…<dN>), где <d1>,<d2>,…<dN>- имена обычных доменов, объявленных в разделе domains.
Предикаты употребляются для представления как данных, так и правил их обработки. Примеры:
Predicates
Add(integer,integer,real)
lk (fr)
1.5 Утверждения
В разделе clauses описываются утверждения относительно предикатов. Отрицание предиката pr задаётся в форме not(pr) и допустимо лишь для правой части правила. Существует два типа утверждений: факты и правила. Факт – это имя предиката с заключённым в скобки перечнем аргументов. Факты употребляются для констатации того, что выполнено некое отношение меж объектами. Обычно они записываются относительно предметных констант Но в фактах могут употребляться и переменные, что дозволяет укрупнять факты, понижая их общее число и трудоёмкость их поиска в базе данных.
к примеру, факт mult(x,0,0) соединяет воединыжды все факты относительно произведения случайного числа на нуль.
правило состоит из головной цели – предиката, за которым следует сначала двоеточие с дефисом (:-), а потом тело правила – предикаты (хвостовые цели) разделённые запятыми либо точками с запятой. В конце утверждения ставится точка. Предполагается, что переменные в фактах и головных целях утверждения х соединены ??? всеобщности. Переменные в хвостовых мотивированных утверждениях соединены кванторами существования, а совокупа хвостовых целей рассматривается как логическое произведение.
Пример интерпретации: правило человек (х):- родитель (X,Y), человек (Y). Читается << Всякий Х отпрыск при условии, что предки Х является Y и объект Y – человек >>. В процессе вычислений заместо переменной быть может подставлен иной объект. В этом случае молвят, что переменная конкретизирована. Область деяния переменной ограничивается утверждением, и передавать информацию из 1-го утверждения в другое через вольные переменные недозволено. В Прологе отсутствуют локальные переменные для сохранения промежных результатов, потому предикаты Пролога дополняются << аргументами-накопителями>>.
1.6 Выражения и обычные предикаты
В теле правила, кроме объявленных в программке предикатов, могут употребляться обычные операции сопоставления. Обычные предикаты делают разные функции по вводу/выводу разных типов данных, работе с файлами и т.п. Для записи арифметических выражений употребляются знаки арифметических операций и обычные функции.
Таблица 1. Обычные функции
№
Обозначение в арифметике
Обозначение в Прологе
1
|x|
абс(x)
2
ex
exp(x)
3
sin x
sin(x)
4
cos x
cos(x)
5
tg x
tan(x)
6
arctg x
artan(x)
7
ln x
ln(x)
8
log x
log(x)
9
sqrt(x)
10
xz
exp(z*ln(x))
1.7 Предикаты ввода/вывода
Ввод осуществляется при помощи предикатов:
readchar(<имя переменной 1>, < имя переменной 2>, …) – ввод символьных переменных;
readint(<перечень переменных>) – ввод целочисленных переменных;
readreal(<перечень переменных>) – ввод вещественных переменных.
Вывод осуществляется предикатом write(<перечень вывода>)
Предикат nl обеспечивает переход на новейшую строчку.
1.8 Цель
Раздел goal содержит внутренний запрос к программке. Для такового запроса Пролог производит поиск лишь первого пригодного решения, при всем этом вывод организуется программером. Целей быть может несколько: тогда они перечисляются через запятую.
Пример цели:
goal
synonym(brave, x),
write(«A synonym for ‘brave’ is»),nl,
write(» ‘ «, x,» ‘ «),nl
2. Задание к работе
Вычислить функцию, заданную согласно варианта (см. таблицу 1).
Написать и отладить программку.
:
Таблица 1
Вариант
Вид выражения
Начальные данные
1
2
3
1
x=1,1
2
x=0,5
3
x=1,2
4
x=1,05
5
х=1,1
6
х=1,33
7
х=1,21
8
х=1,08
9
х=3,9
10
х=1,37
11
х=1,05
12
х=1,022
13
x=1,2
14
x=1,8
15
x=1,01
16
x=1,77
17
X=1
18
x=1.08
19
x=1.03
20
x=1.19
21
x=1.27
22
x=1.21
23
x=1.37
24
x=1.04
25
x=1.06
3. Контрольные вопросцы
1) Главные секции Пролог-программы.
2) Какие обычные домены имеются в Прологе.
3) Обычные предикаты ввода/вывода. Описание и характеристики.
4) Главные обычные функции.
5) Алфавит языка Пролог.
]]>