Будь умным!


У вас вопросы?
У нас ответы:) SamZan.ru

Домены подразделяются на простые и структурированные стандартные и нестандартные

Работа добавлена на сайт samzan.ru: 2016-06-20


Программа на языке Пролог состоит из следующих разделов:

DOMAINS – определения доменов (классов объектов);

DATABASE (необязательный) – предикаты базы данных;

PREDICATES – остальные предикаты;

GOAL (необязательный) – внутренняя цель;

CLAUSES – правила.

Домены подразделяются на простые и структурированные, стандартные и нестандартные. К стандартным доменам относятся:

symbol – символьная константа (длина не более 250 символов

string – строка символов: любая последовательность символов, заключенная в двойные кавычки.

char – отдельный символ, заключенный между двумя апострофами.

integer – целое число в диапазоне от –32768 до +32767.

real – действительное число, допускается обычная и экспоненциальная формы запи­си. Значение экспоненты должно быть в диапазоне от Е-307 до Е+308. Примеры: ‑34.567, 0.654, 9.76Е+3.

file – файловая переменная, ее значение определяется по правилам именования фай­лов и устройств в MS DOS. При выполнении операций с файлом ее необходимо связать с конкретным файлом или устройством.

Список – это упорядоченный набор объектов – элементов списка, следующих друг за другом. Элементы списка в языке Турбо-Пролог должны принадлежать одному и тому же доменному типу. Объектами списка могут быть целые числа, действительные числа, символы, символьные строки, структуры.

Совокупность элементов списка заключается в квадратные скобки, а друг от друга они отделяются запятыми. Примерами списков являются:

[10, 24, 1, 8, 385, 0, 8]

Список может содержать произвольное число элементов (ограничением является объем доступной оперативной памяти). Список, не содержащий элементов, называется пустым списком и обозначается [].

Для использования списков в Пролог-программе необходимо следующее.

1. В разделе domains описать домен списка. Домен списка задается в формате:

<ИМЯ ДОМЕНА> = <ДОМЕН ЭЛЕМЕНТА>*

Стандартные предикаты ввода-вывода

геаdсhаг(СимволПеременной)(сhаг):(вых)

х должна принадлежать литерному домену

геаdint(ПеременнаяЦел)(integer):(вых)

домен для переменной х

должен иметь целый тип и к моменту вызова должна быть свободна

геаdln(ПеременнаяСтр)(string):(вых)

домен для переменной х должен иметь строковый или символьный тип. До вызова предиката переменная должна быть свободна

геаdгеа1(ПеременнаяВещ)(геа1):(вых)

домен для переменной должен иметь тип real, к моменту вызова предиката х должна быть свободной

write(e1,e2,e3...eN):( вх, вх, вх... вх)

Выводит значения констант или переменных в текущее окно или на текущее устрой­ство вывода. Write может быть связан с произвольным ненулевым числом аргументов ei. Аргументы не могут быть свободными переменными.

writef(ФорматСтр, Apг1,Apг2,…,ApгN):(вх,вх....вх)

Выполняет форматированный вывод. Аргументы Аргi – могут быть константами или переменными. Форматы задаются в виде строки. Формат спецификаций формы %–m.pf.

Формат спецификаций состоит из следующих частей: дефис означает, что поля выравниваются слева (если дефиса нет – справа); m – десятичное число, описывающее минимальный размер поля; р описывает размер дробной части вещественного числа или максимальное количество напечатанных в строке символов. Поле f описывает следующие форматы:

f –   формат вещественного числа в фиксированной десятичной системе счисления (такой, как 123.4 или 0.004321);

е –   формат вещественного числа в экспоненциальной форме представления;

g –   формат вещественного числа в коротком формате (используется по умолчанию);

d –   формат целых десятичных чисел;

u –   формат целых чисел как десятичное число без знака;

х –   формат символов или целых чисел как шестнадцатеричное число;

с –   целых чисел как символа (по ASCII коду);

s –   формат как строка (символов и строк).

Повтор и рекурсия

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

Используются следующие методы повторения:

  1.  метод отката после неудачи;
  2.  метод отсечения и отката;
  3.  правило повтора, определяемое пользователем;
  4.  обобщенное рекурсивное правило.

Простая рекурсия

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

Пример правила рекурсии:

write_srting :- /* выдать строку */

write(«Человек - это звучит гордо!»),

nl,

write_string.

Это правило состоит из трех компонент. Первые две выдают строку «Человек - это звучит гордо!» и переводят курсор на начало следующей строки экрана. Третья - это само правило. Так как оно содержит само себя, то чтобы быть успешным, правило write_string должно удовлетворять само себе. Это приводит снова к вызову операции выдачи на экран строки и смещение курсора на начало новой строки экрана. Процесс продолжается бесконечно и в результате строки выдается на экран бесконечное число раз.

Метод обобщенного правила рекурсии (ОПР)

Обобщенное правило рекурсии содержит в теле правила само себя. Рекурсия будет конечной, если в правило включено условие выхода, гарантирующее окончание его работы. Тело правила состоит из утверждений и правил, определяющих задачи, которые должны быть выполнены.

Общий вид правила рекурсии:

<имя правила рекурсии> : <список предикатов>, (1)

<предикат условия выхода>, (2)

<список предикатов>, (3)

<имя правила рекурсии>, (4)

<список предикатов>. (5)

Хотя структура этого правила сложнее чем структура простого правила рекурсии, однако в обеих случаях действуют одни и те же принципы.

Данное правило рекурсии имеет пять компонент

Первая - это группа предикатов. Успех или неудача любого из них на рекурсиию не влияет.

Следующая компонента - предикат условия выхода. Успех или неудача этого предиката либо позволяет продолжить рекурсию, либо вызывает ее остановку.

Третья компонента - список других предикатов. Аналогично, успех или неудача этих предикатов на рекурсию не оказывает влияния.

Четвертая группа - само рекурсивное правило. Успех этого правила вызывает рекурсию.

Пятая группа - список предикатов, успех или неудача которых не влияет на рекурсию. Пятая группа также получает значения (если они имеются), помещенные в стек во время выполнения рекурсии.

Правило рекурсии должно содержать условие выхода. В противном случае рекурсия бесконечна и правило бесполезно.

Сортировка списков

В этом методе элементы в списке переставляются, и проверяется отсортирован этот список или нет:

Это записывается:

sortn(L1, L2) :- permutation(L1, L2), sorted(L2), !.

Перестановки определим через append

permutation(L, [H|T]) :- append(V, [H|U], L),

append(V, U, W),

permutation(W, T).

permutation([], []).

Проверка того, что элементы списка расположены в возрастающем порядке выражается через два предложения. Факт означает, что список из одного элемента всегда упорядочен. Правило утверждает, что список упорядочен ,если первые два элемента расположены по порядку и остаток ,начинающийся со второго элемента тоже упорядочен:

sorted([L]).

sorted([X,Y|T]) :- order(X,Y), sorted([Y|T]).

order(X, Y) :- X =< Y.

Обработка строк

Строка - это набор символов (слова и предложения). Термин «символ» включает буквы русского (английского) алфавита, цифры, такие символы как +, @ и $, а так же управляющие символы, соответствующие некоторым клавишам, таким как Enter и Esc.

Длина строки измеряется полным числом символов в строке.

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

Пролог имеет встроенный предикат concat, который выполняет соединение (конкатенацию) двух строк.

Составные объекты

owner(«Mary», «Garfield»). /* У Мери есть Гарфильд */

Первый объект Mary имеет простую структуру. Он представляет сам себя. То же можно сказать и про объект Garfield.

Любой объект, представляющий сам себя, называется простым объектом. Аналогично, структура, состоящая из простых объектов, называется простой структурой.

Утверждение owner отражает тот факт, что Mary обладает Garfield, который может быть либо именем домашнего животного Mary, либо названием книги

/* У Мери есть любимец - Гарфильд */

owner(“Mary”,pet(“Garfield”)).

/* У Мери есть книга - «Гарфильд» */

owner(«Mary»,book(«Garfield»)).

Объект, представляющий другой объект или совокупность объектов, называется составным объектом. Записанные же таким образом предикаты owner называются составными структурами, поскольку они скомпонованы из составных объектов.

likes(“Tom”,fruits(apples,orange,banana)).

Терм fruits в этом утверждении называется функтором. Функтор является первым термом составного объекта. Функтор составного объекта есть на самом деле предикат, хотя он и вставлен внутрь другого предиката. Главным функтором здесь является предикат likes.

Стандартные предикаты для динамических БД

Предикат asserta заносит новый факт в базу данных, располагающуюся в оперативной памяти компьютера (резидентная БД). Новый факт помещается перед всеми уже внесенными утверждениями данного предиката. Этот предикат имеет такой синтаксис

Предикат assertz так же, как и asserta, заносит новые утверждения в базу данных. Однако он помещает новое утверждение за всеми уже имеющимися в базе утверждениями того же предиката. Синтаксис предиката тот же.

Предикат retract удаляет утверждение из динамической БД

Предикаты для работы с БД в целом

Для записи динамической БД в файл на диск и для загрузки содержимого файла в динамическую БД применяются стандартные предикаты save и consult.

Предикат save сохраняет находящуюся в оперативной памяти базу данных в текстовом файле. Синтаксис этого предиката

Произвольный текстовый файл, содержащий факты, совпадающие по синтаксису с предикатами описанной в программе БД, может быть считан в память (загружен) при помощи предиката consult

Управляющие структуры в лиспе

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

1. Самоопределённые формы. Эти формы, подобно константам, являются объектами, представляющими лишь самих себя. Это такие формы, как числа и специальные константы true, false и nil, а также знаки и строки.

2. Символы, которые используются в качестве переменных.

3. Формы в виде списочной структуры, которыми являются:

-Вызовы функций и лямбда-вызовы.

-Специальные формы, в которые входят setq, ' и многие описанные в этой главе формы, предназначенные для управления вычислением и контекстом.

-Макровызовы (будут рассмотрены позже).

Наиболее важные с точки зрения программирования синтаксические формы можно на основе их использования разделить на следующие группы:

Работа с контекстом:

- ' или блокировка вычисления;

- вызов функции и лямбда-вызов;

- предложение let.

Форма исполнения:

- пошаговая progn;

- параллельная parallel;

- независимая fork.

Разветвление вычислений:

- условные предложения cond, if.

Итерации:

- циклические предложения for, for*, while, do-while.

Разветвление вычислений: условное предложение COND

  Предложение cond является основным средством разветвления вычислений. Это синтаксическая форма, позволяющая управлять вычислениями на основе определяемых предикатами условий. Структура условного предложения такова:

(nil cond


  (
p1 a1)
  (
p2 a2)
  …
  
(pn an))

  Предикатами pi и результирующими выражениями ai могут быть произвольные формы. Значение предложения cond определяется следующим образом:

  1.  Выражения pi, выполняющие роль предикатов, вычисляются пошагово слева направо (сверху вниз) до тех пор, пока не встретится выражение, значением которого не является ни nil ниfalse, т.е. логическим значением которого является истина.
  2.  Вычисляется выражение, соответствующее этому предикату, и полученное значение возвращается в качестве значения всего предложения cond.
  3.  Если истинного предиката нет, то значением cond будет nil.

 В простом случае можно воспользоваться вполне естественной и содержащей мало скобок формой if.

(nil if условие то-форма иначе-форма)



(nil cond


  (
условие то-форма)


  (true
иначе-форма))

>(nil if  (nil  atom  true) 'атом 'список)

атом




1. Bнести изменения и дополнения в Список производств цехов профессий и должностей с вредными условиями труд
2. тематике разработан учителем начальных классов МОУ Дубовская СОШ с углубленным изучением отдельных предме.html
3. КОНТРОЛЬНАЯ РАБОТА название работы
4. Ост который предусматривал геноцид и этнические чистки на территории СССР и Восточной Европы
5. тема філософії Гегеля У філософії Гегеля слід чітко розрізняти діалектичний метод та систему що суперечат
6. . Первые Романовы
7. Положительным свойством свеклы является то что в ее составе содержится более 50 натрия и 5 кальция а такое с
8. Гуманитарный Институт Таврического национального университета им.html
9. Асинхронный двигатель
10. Акционеpные общества, создание, pеоганизация, ликвидация
11. он никогда не рыдал
12. Управление развитием предприятия
13. Организация проведения деловых совещаний и переговоров
14. Аэропорт Кольцово
15. Размещение угольной промышленности России
16. Інтелектуальна власність при управлінні інноваційними проектами
17. Стадии административного процесса
18. реферату- Іван Брюховецький славний представник козацької старшини Війська ЗапорізькогоРозділ- Українозна
19. Реферат- Атлетическая гимнастика
20. Школа БИ Рамеева универсальные ЭВМ