Конспект лекций по дисциплине "Программное обеспечение интеллектуальных систем". Для магистров специальности 5А521902




Скачать 401.76 Kb.
НазваниеКонспект лекций по дисциплине "Программное обеспечение интеллектуальных систем". Для магистров специальности 5А521902
страница2/4
Дата27.12.2012
Размер401.76 Kb.
ТипКонспект
1   2   3   4

Лекция №4.

Организация циклов.

План Лекции

  1. Рекурсивные операции. Методы организации

  2. Методы обобщенного правила рекурсии – ОПР



Ключевые слова

Простая рекурсия Организация циклов Рекурсивные операции. Методы организации Методы обобщенного правила рекурсии – ОПР.

1Организация циклов.

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

В первом способе используется рекурсия. Общий вид правила, выполняющего рекурсию, следующий:

repetitive_rule :- %правило рекурсии

<предикаты и правила>,

repetitive_rule.

Во втором способе используется встроенный предикат fail, который вызывает откат. Данный способ называют повторением.

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

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

repetitive_rule :- %правило повторения

<предикаты и правила>,

fail.

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

Пример 2а.

Domains r=real

Predicates

start calculate(r,r,r)

Goal start.

Clauses

start:- write("Введите положительное целое число: "),

readint(X),calculate(X,1,1).

calculate(X,Y,Z) :- X>Y,Y1=Y+1,Z1=Z*Y1,calculate(X,Y1,Z1).

calculate(X,Y,Z) :- X=Y,write(X,"!=",Z).

calculate(X,Y,Z) :- X
В данном примере используется символ «=». Данный символ применяется в двух случаях:

  1. чтобы конкретизировать переменную (присвоить конкретное значение);

  1. чтобы сравнить два значения.

Внешне эти два случая могут ничем не отличаться. Чтобы правильно понять смысл символа «=» в каком-то конкретном случае, необходимо проследить предыдущую цепь событий. В примере 2а в первом правиле с предикатом calculate вновь введенным переменным Y1 и Z1 присваиваются конкретные значения. Во втором правиле X и Y сравниваются, т.к. их значения передаются из заголовка правила (т.е. значения X и Y уже конкретизированы).

В примере 2в демонстрируется организация цикла без рекурсии с использованием предиката fail. Данный пример позволяет с помощью стандартных средств Пролога выбирать из каталога файлы и просматривать их содержимое.

Пример 2в.

Database namefile(string) % для сохранения имени выбранного файла

Predicates start andisk

Goal start.

Clauses

start:- makewindow(1,112,94," РЕЖИМ ПРОСМОТРА ТЕКСТОВЫХ ФАЙЛОВ

(Esc-выход ...) ",0,0,25,80), andisk.

andisk:- makewindow(2,45,47,"",1,1,4,78),dir("C:","*.*",Name),

assert(namefile(Name)),removewindow,fail.

andisk:- not(namefile(_)),removewindow,exit,!.

andisk:- namefile(Name),concat("Содержимое файла ",Name,S),

makewindow(3,73,27,S,1,1,23,78), file_str(Name,Str),

display(Str),retractall(namefile(_)),removewindow,fail.

andisk:- andisk.

Ниже приведен пример 3, в котором с помощью предиката fail на экран выдается содержимое всей базы фактов с предикатом woman.

Пример 3.

Domains

s=string

Predicates

start

woman(s)

Goal start.

Clauses

start:- woman(Name),write(Name),nl,fail.

% база фактов

woman("Катя"). woman("Таня"). woman("Маша"). woman("Ира")

Кроме механизма отката в Прологе существует механизм отсечения, который можно организовать с помощью предиката cut (отсечение). В тексте программы предикат cut обозначается символом « ! ». Данный предикат устанавливает барьер, запрещающий выполнить откат ко всем альтернативным решениям текущей проблемы. Однако последующие подцели могут создать новые указатели отката и тем самым создать условия для поиска новых решений.

В примере 4 демонстрируется механизм отката. В отличии от примера 3, где на экран выдаются все факты, в данном примере, как только будет найдена женщина с именем Маша и выведено на экран, дальнейший поиск прекращается (т.е. происходит отсечение).

Пример 4.

Domains s=string

Predicates start

woman(s)

make_cut(s)

Goal start.

Clauses

start:- woman(Name),write(Name),nl,make_cut(Name),!,fail.

make_cut(Name):-Name="Маша".

% база фактов

woman("Катя"). woman("Таня"). woman("Маша"). woman("Ира").


2Рекурсивные операции. Методы организации


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


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

Общий вид:

голова:

<предикаты и правила>

голова.

Этот процесс может повторяться бесконечно, но при этом число элементов данных непрерывно растет и стек, где хранятся значения переменных, может переполниться. При этом на экране появляется сообщение об ошибке. Увеличить размер стека можно в меню “Setup” опция Miscellaneous setting. Но чтобы избегать бесконечной рекурсии нужно ввести предикат завершения, содержащий условия выхода.

Например:

1)write_st:-

write(“Вводим символы”),nl,

readchar(X),write(X),nl,

write_st.

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


read_a:-

readchar(X),

X<>’#’,

write(X),nl,

read_a.

Это простое правило рекурсии.


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


Общий вид ОПР имеет структуру:

<имя правила рекурсии>:-

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

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

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

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

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

Данное правило рекурсии имеет 5 компонент.

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

Вторая компонента – определяет ход рекурсии, или останавливает ее, или продолжает.

Третья компонента – список других предикатов. Они не влияют на рекурсию.

Четвертая компонента – само правило рекурсии.

Пятая – группа предикатов получает значения, помещенные в стек во время выполнения рекурсии.

Обычно, рекурсивная процедура должна состоять из 2 фраз:

1. нерекурсив., определяющий вид процедуры в момент прекращения рекурсии

2. рекурсивное правило


Например: Генерация всех целых чисел, начиная с 1 и заканчивая Э.

Построим правило

write_n(N):-

N<8,

write(N),nl,

Next_N = N + 1,

write_n(Next_n).

Вся программа имеет вид:

domains

number = integer

predicates

write_n(number)

goal

write(“Ряд чисел_”),nl

write_n(1),

write(“Ряд закончен”).

clauses

write_n(N):-

N<8,

write(N),nl,

Next_n = N + 1,

write_n(Next_n).


Важным свойством правила является его расширяемость.

Рассмотрим 2 пример: Вычисление суммы ряда от 1 до 7.


domains

n,sum = integer

predicates

sum_ser(N,Sum)

goal

sum_ser(7,sum),write (“Summa = ”,sum).

clauses

sum_ser(1,1).

sum_ser(N,Sum):-

N>0,

Next_n = N – 1,

sum_ser(Next_n,Part_s),

Sum = N + Part_s.


Вычислим цель (7, Sum). Она сопоставляется с 1 фактом (1,1) – неуспешно. Затем берется правило: sum_ser(N,Sum) оно выполняется так N>0, высчитывается Next_n = 7 – 1 = 6 и вызывается правило с N=6. Part_s – свободная переменная.

До правила Sum = N + Part_s дело не доходит пока работает рекурсия, т.е. пока sum_ser(1,Part_s). Эта позиция сопоставляется с 1 фактом sum_ser(1,1) и Part_s приравнивается 1.

Далее проверяется 2 правило: и Sum получает значение 1. Next_n = 0 и по условию N>0 это правило становится неуспешным. Таким образом процесс прыгает к подцели Sum = N + Part_s.

В стеке были заполнены все значения N от «7 до 1», поэтому Sum последовательно присваивается: Sum: 1,3,6,10,15,21,28.


Рассмотрим программу ФАКТОРИАЛ.

N! = N * (N-1) * (N-2) … * 2 * 1


domains

number, product = integer

predicates

factorial(number, product)

goal

factorial(7,Result),

write(“7! = ”, Result), nl.

clauses

factorial(1,1):- !.

factorial(Number, Result):-

Next_n = Number – 1,

factorial(Next_n, Part_fac),

Result = Number * Part_fac).


Лекция №5.

Работа со статическими файлами

План Лекции

  1. Запись в файл

  2. Чтение из файла

  3. Модификация существующего файла

  4. Дозапись в конец уже существующего файла

  5. .Предикаты по общей работе с файлом

Ключевые слова

Запись в файл.Чтение из файла .Модификация существующего файла.

Дозапись в конец уже существующего файла..Предикаты по общей работе с файлом.

правило создания и записи файла прямого доступа.


Для использования в программе файла, необходимо снабдить его описанием файлового домена.

File = datafile

Символическое имя datafile есть идентификатор, который может быть логически отождествлен с DOS-ким именем файла. Это символическое имя называют логическим именем.

В описании file может быть указано несколько символических имен, но само описание должно быть существенным.

File = datafile1; datafile2; datafile3


1.Запись в файл

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

OPENWrite(datafile1,”имя файла”)

Например:

OPENWrite(datafile1,”FILE1.Dat”)

Затем, что этим предикатом осуществляется открытие файла. Если с таким именем файл уже есть, то его содержимое пропадет. Поэтому сначала надо проверить наличие файла при помощи предиката

Existfile (”имя файла”)

  1. Назначить файл для записи в него можно при помощи предиката

Writedevice(datafile1)

  1. Сама запись в файл осуществляется предикатами

Write, writef

  1. Закрытие файла осуществляется предикатом

Closefile(datafile)

Когда файл закрыт, операции чтения или записи для него недопустимы, он защищен от потери информации, а указатель переведен на начало файла автоматически.


2.Чтение из файла


Для этого требуется:

  1. Открытие файла openread(datafile1,”file.dat”)

  2. Назначить файл устройством чтения readdevice(datafile1)

  3. Само чтение из файла осуществляется при помощи соответствующего предиката или правила

  4. Закрытие файла closefile(datafile1)


3.Модификация существующего файла


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

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

Предикат openmodify(datafile1,”имя файла”) успешен, если файл существует на диске, т.е. до этого он должен был быть создан предикатом openwrite


Модификация файла осуществляется посредством следующих шагов:

  1. Открытие файла. Openmodify (datafile1,”имя”)

  2. Переадресация вывода в файл. Writedevice (datafile1)

  3. Запись в файл новых данных

  4. Использование произвольных предикатов по работе с данными файлами

  5. Закрытие файла closefile(datafile1)


4.Дозапись в конец уже существующего файла



  1. Когда файл открывается для дозаписи, то указатель сразу смещается в конец предикатом openappend(datafile1,”имя”)

  2. Переадресация вывода в файл. Writedevice(datafile)

  3. Дозапись при помощи предикатов и правил

  4. Закрытие файла closefile(datafile1)


5.Предикаты по общей работе с файлом


В системе Турбо Пролог имеются следующие предикаты для работы с файлами в целом:

  1. сохранение файла – Save(DOS_name)

  2. уничтожение файла – deletefile(DOS_name)

  3. переименование файла – renamefile(DOS_name)

  4. проверка наличия файла – existfile(DOS_name)

  5. сброс данных из внутреннего буфера – flush(file_domain)

  6. выбор дисковода и пути доступа – disk(path)

  7. выдача каталога директории – dir(path,file_spec,file_name)


file_spec – группа файлов

file_name – имя найденного файла


Рассмотрим примеры:

Пример 1. Вывод информации в файл, содержащейся в фактах.

Domains

str = string

file = datafile

Predicates

data(str)

write_l

Goal

openwrite(datafile1,”имя”),

write_l :- data(Line),

write_l,

closefile(datafile1).

Clauses

data(“Первое предложение”).

data(“Второе предложение”),

……………………………….

write(Line),nl, /*вывод на экран*/

writedevice(datafile), /*переадресация из файла*/

write(Line),nl,

writedevice(screen), /*переадресация на экран*/

write(Line),

file.

write_l.

Последний write_l позволяет удовлетворить цель, когда правило дало неуспех из-за конца данных о data.

Пример 2. Чтение данных из существующего файла.


Domains

str = string

file = datafile

Predicates

read_l

Goal

openread(datafile1,”имя”),

read_l,

closefile(datafile).

Clauses

read_l :- readdevice(datafile),

not(eof(datafile)),

readln(Line),

writedevice(screen),

write(Line),nl,

read_l, /*рекурсия на чтение*/

read_l.


Пример 3. Запись в файл данных с клавиатуры.


Рассмотрим правило

create_a_file :-

readln(Filename), /*чтение переменной из экрана, которая определяет имя файла*/

openwrite(datafile1,filename), /*открытие файла с именем переменной*/

writedevice(datafile),

readline(Dstring), /*назначение файла данным*/

concat(Dstring,”\13\10”,Cstring), /*добавляет к строке спец. символ конца строки, чтобы readln различал конец строки*/

readin(Dstring,Cstring)

closefile(datafile).

readin(“done”,_):-!

readin(_,Cstring):- /*рекурсивное правило … записи в файл*/

write(Cstring) /*запись в файл …строки*/

readln(Dstring 1), /*чтение след. строки из клавиатуры*/

concat( Dstring 1,”\13\10”,Cstring 1),

writedevice(datafile), /*необязательный т.к. файл уже назначен*/

readin(Dstring 1,Cstring 1).


Пример 4. Дозапись данных в файл.


append_file :-

openappend(datafile,”имя”),

writedevice(datafile),

readln(Dstring) /*чтение данных _ строки*/

concat(Dstring,”\13\10”,Cstring),

readin(Dstring,Cstring),

closefile(datafile).


readin – правило, списанное выше

1   2   3   4

Похожие:

Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconО. Л. Молдованова Документационное обеспечение управления
Конспект лекций предназначен для студентов всех форм обучения по специальности 0801110 «Экономика и бухгалтерский учет (по отраслям)»...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа по дисциплине Архитектура вычислительных систем Для специальности 230105(220400) Программное обеспечение вычислительной техники и автоматизированных систем
Рабочая программа составлена в соответствии с гос во по специальности 230105 Программное обеспечение вычислительной техники и автоматизированных...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа По дисциплине “Преддипломная практика" Для специальности 230105 (220400) "Программное обеспечение вычислительной техники и автоматизированных систем"
Гос во по специальности 230105 (220400) – Программное обеспечение вычислительной техники и автоматизированных систем, утвержденного...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа по дисциплине «проектирование систем управления и менеджмента» для специальности 230105 “Программное обеспечение вычислительной техники и автоматизированных систем”
Рабочая программа составлена на основании гос впо для специальности 230105 «Программное обеспечение вычислительной техники и автоматизированных...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 icon«Программное обеспечение ЭВМ и информационные технологии» мгту им. Н. Э. Баумана 2011
В настоящее время кафедра готовит как бакалавров и магистров, так и дипломированных специалистов – инженеров по специальности 2204...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconМетодические указания составлены в соответствии с рабочей программой по дисциплине «Программное обеспечение компьютерных сетей»
...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconРабочая программа По дисциплине “Методы оптимизации" для специальности 230105 "Программное обеспечение вычислительной техники и автоматизированных систем"
По дисциплине “Методы оптимизации" для специальности 230105 "Программное обеспечение вычислительной техники и автоматизированных...
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconПрограмма курса «Технологии и языки Internet-программирования» разработана для студентов специальности 1-40 01 01 «Программное обеспечение информационных технологий»
Д. В. Антоник, старший преподаватель кафедры программного обеспечения интеллектуальных и компьютерных систем
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconУчебно-методический комплекс по дисциплине “Базы данных“ для специальности 230105 программное обеспечение вычислительной техники и автоматизированных систем
Базы данных“ для специальности 230105 – программное обеспечение вычислительной техники и автоматизированных систем
Конспект лекций по дисциплине \"Программное обеспечение интеллектуальных систем\". Для магистров специальности 5А521902 iconКонспект лекций по дисциплине «Основы лесоводства и лесной таксации»
Конспект лекций предназначен для студентов заочного отделения указанной специальности
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница