Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Введение. Требования к оформлению курсовой работы стандартные (для АГТУ): не менее 15 страниц, основной шрифт абзаца – 13 шрифт “Times”




Требования к оформлению курсовой работы стандартные (для АГТУ): не менее 15 страниц, основной шрифт абзаца – 13 шрифт “Times”, полуторный межстрочный интервал, отступ слева 10 мм, отступ перед абзацем 6 пт, поля Л:35, П:15, ВиН:20 мм. Нумерация страниц со второй страницы в верхнем правом углу.

Списки

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

[слон, лошадь, обезьяна, собака]

Это список из четырех атомов - слон, лошадь, обезьяна, собака.

Элементами списка могут быть любые термы Пролога, т.е. атомы, числа, переменные и составные термы. Это позволяет составлять списки из списков. Пустой список записывается как [].

Вот пример списка с несколько более сложной структурой:

[слон, [ ], X, предок(Х, том), [a,b,c], f(22)]

Первый элемент непустого списка называется головой, а остальная часть списка носит название хвост. У списка, состоящего только из одного элемента головой является этот единственный элемент, а хвостом - пустой список. Обозначение [H|T] используется для представления списка с головой H и хвостом T. Если символ | помещен перед последним термом списка, то это означает, что этот последний терм определяет другой список. Полный список получится, если соединить этот подсписок с последовательностью элементов, расположенных до черты.

В следующем примере 1 - голова списка, а [2, 3, 4, 5] - хвост. Пролог покажет это при помощи сопоставления списка чисел с образцом, состоящим из головы и хвоста.

?- [1, 2, 3, 4, 5] = [Head | Tail].Head = 1Tail = [2, 3, 4, 5]Yes

Здесь Head и Tail - только имена переменных. Мы могли бы использовать X и Y или какие-нибудь другие имена переменных с тем же успехом. Заметим, что хвост списка всегда является списком. Голова, в свою очередь, есть элемент списка. Это относится и ко всем другим элементам, расположенным до вертикальной черты списка, что позволяет выделить, скажем, второй элемент списка.

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

?- [слон, лошадь, осел, собака] = [_, X | _ ].X = лошадьYes

Рассмотрим несколько процедур обработки списков. Обратите внимание, что все они используют рекурсию, в которой терминальное (базовое) правило использует пустой список.

Пример: Следующий предикат подсчитывает сумму всех элементов списка чисел.

сумма_списка([],0).сумма_списка([H|T],S):- number(H), сумма_списка(T,S1), S is S1+H.?- сумма_списка([0,1,7,2,456],X).X = 466Yes

Пример: Подсчитаем количество элементов произвольного списка.

колво_элементов([],0). % кол-во элементов пустого списка равно 0колво_элементов([_|T],S):- колво_элементов (T,S1), S is S1+1.?- колво_элементов([a,d,[d,t,[t]],s],X).X = 4Yes

Пример: Принадлежность элемента списку.

принадлежит(Х,[Х|_]). /* любой элемент списка всегда является головой какого-нибудь подсписка */принадпежит(Х,[_|Z):- принадлежит(Х,Z).?- принадлежит(седло,[руль,рама,колесо,седло])Yes

Пример: Выбор n-го элемента списка.

n(1, E, [E|_]).n(N,E,[_|L]):- C is N - 1, n(C, E, L).?- n(3,X,[1,2,3,4,5]).X = 31 solution

Пример: Функция присоединения.

append([ ], L, L).append([X|Ll], L2, [X|L3]):- append(Ll,L2,L3).

Функция append позволяет составлять и расчленять список.

?- append([a,b,c], [d,e,f], L)L = [a,b,c,d,e,f].?- append(L, [d,e,f|, [a,b,c,d,e,f])L = [a,b,c].?- append([a,b,c], L, [a,b,c,d,e,f])L = [d,e,f].?- append(Ll, L2, [a,b,c,d])L1= [], L2= [a,b,c,d]L1= [a], L2= [b,c,d]L1= [a,b], L2= [c,d]L1= [a,b,c], L2= [d]L1= [a,b,c,d], L2= []

Пример: Поиск наименьшего элемента списка.

меньший([X], X).меньший([X, Y|Z], R):- X =< Y, меньший([X|Z], R); X > Y, меньший([Y|Z], R).?- меньший([6,5,7,3,2,0],X)X = 0

Пример: Удаление заданного элемента из списка.

удалить(E, [E | Y], Y).удалить(E, [X | Y], [X | Z]):- удалить(E, Y, Z).?- удалить(7,[1,2,3,7,4,5],Y)Y= [1,2,3,4,5]

Пример: Сортировка элементов списка.

сортировать([], []).сортировать(L, [M|R]):- меньший(L, M), удалить(M, L, Q), сортировать(Q, R),!.?- сортировать([1,5,2,7,3,4,2,9],X)X= [1,2,2,3,4,5,7,9]

Пример: Перевод одного списка в другой, согласно словарю.

словарь("I";"я").словарь("study","изучаю").словарь("language","язык").словарь("PROLOG","Пролог").словарь("in","в").словарь("the university","университете"). перевести ([], []).перевести ([С_А|Ф_А], [С_Р|Ф_Р]):- словарь (С_А, С_Р), перевести (Ф_А, Ф_Р).?- перевести(["I","study","language","PROLOG","in","the university"],P)Р = ["Я", "изучаю", "язык", "Пролог", "в", "университете"]?- перевести(Р, ["Я", "изучаю", "язык", "Пролог", "в", "университете”]).P = ["I", "study", "language", "PROLOG", "in", "the university"]

Пример: Предикат место/3 успешен, если третий аргумент есть список, полученный вставкой первого аргумента в произвольное место списка, являющимся вторым аргументом.

место(E, L, [E|L]).место(E, [H|L], [H|Y]):- место(E, L,Y).

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

?- место(1,[2,3],X).X = [1, 2, 3]X = [2, 1, 3]X = [2, 3, 1]No?- место(1,L,[2,1,3]).L = [2, 3]No?- место(X,[2,3],[2,1,3]).X = 1No

Пример: Разбить список с элементами разделителями (0) на список списков (слов).

parser([],[],[]).parser([X|Z],D,W):- parser(Z,D1,W1),(X \== 0, D = [X|D1], W = W1; X == 0, D = [], W = [D1|W1]).concat(Z,W):- parser(Z,D1,W1), W = [D1|W1].?- concat([a,s,d,f,0,r,t,e,0,w,d,0,g,h,j,0,r,t],X)X= [[a,s,d,f],[r,t,e],[w,d],[g,h,j],[r,t]]

Пример: Разбить список с элементами разделителями (0) на список списков (слов).

calc([],0,[]).calc([X|Z],D,W):- calc(Z,D1,W1),(X \== 0, D is D1 + 1, W = W1; X == 0, D = 0, W = [D1|W1]).conc(Z,W):- calc(Z,D1,W1), W = [D1|W1].?- conc([a,s,d,f,0,r,t,e,0,w,d,0,g,h,j,0,r,t],X)X= [4,3,2,3,2]

Пример: Предикат перестановка/2 дает все перестановки первого аргумента.

перестановка([],[]).перестановка([H|L],Z):- перестановка(L,Y), место(H,Y,Z).

Пример использования:

?- перестановка([a,b,c],X).X = [a, b, c] X = [b, a, c] X = [b, c, a] X = [a, c, b] X = [c, a, b] X = [c, b, a] No

И, наконец, приведем правило для печати всех возможных перестановок списка:

все_перестановки(L):- перестановка(L,R), write(R), nl, fail.

Первая подцель предиката вычисляет очередную перестановку, печатает ее и переходит к последней подцели - fail. Эта подцель всегда неуспешна, что заставляет Пролог вернуться к началу правила и продолжить поиск решения. Работа процедуры завершится, когда все перестановки будут исчерпаны:

?- все_перестановки(['маркиза', 'ваши прекрасные глаза',| 'сулят мне смерть от любви']). [маркиза, ваши прекрасные глаза, сулят мне смерть от любви][ваши прекрасные глаза, маркиза, сулят мне смерть от любви][ваши прекрасные глаза, сулят мне смерть от любви, маркиза][маркиза, сулят мне смерть от любви, ваши прекрасные глаза][сулят мне смерть от любви, маркиза, ваши прекрасные глаза][сулят мне смерть от любви, ваши прекрасные глаза, маркиза]No

Часть II. Указания к выполнению контрольной работы

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

В работе разбираются следующие теоретические разделы:

· модель семантической сети

· продукционная модель

· способ представления знаний в среде ПРОЛОГ

· механизм вывода в среде ПРОЛОГ

В процессе выполнения данной работы студент должен составить экспертную систему по анализу родственных связей некоторой произвольно выбранной (самостоятельно) группы людей.

Синтаксис языка ПРОЛОГ требует, чтобы все идентификаторы констант и предикатов начинаются со строчной буквы, а все идентификаторы переменных начинаются с заглавной буквы. В данном методическом пособии для удобства чтения договоримся о другом стиле: идентификаторы, начинающиеся с заглавной или строчной русской буквы, являются константами или предикатами.

План курсовой работы:

1. Введение. (1..3 стр)

2. Генеалогическое дерево. (1..2)

3. Перевод генеалогического дерева в базу фактов. (2..3)

4. Составление правил искомых родственных связей в базе знаний. (3..5)

5. Примеры запросов к базе знаний и ее ответов (2..3).

6. Листинг разработанной базы знаний на языке ПРОЛОГ. (2..3)

7. Список литературы. (1..2)


В этом параграфе кратко рассматриваются некоторые исторические и теоретические вопросы и делаются акценты на целях и задачах выполнения данной курсовой работы (раздел 1, «История и перспективы развития языка Пролог»).




Поделиться с друзьями:


Дата добавления: 2014-12-27; Просмотров: 553; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.007 сек.