КАТЕГОРИИ: Архитектура-(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Пример: Удаление заданного элемента из списка. Пример: Сортировка элементов списка. сортировать([], []).сортировать(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 успешен, если третий аргумент есть список, полученный вставкой первого аргумента в произвольное место списка, являющимся вторым аргументом. Посмотрим на результаты некоторых запросов, использующих этот предикат. ?- место(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. Эта подцель всегда неуспешна, что заставляет Пролог вернуться к началу правила и продолжить поиск решения. Работа процедуры завершится, когда все перестановки будут исчерпаны: Часть 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; Просмотров: 578; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |