КАТЕГОРИИ: Архитектура-(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) |
Базы знаний
Как уже отмечалось, программа на языке Пролог, содержащая факты и правила, составляет базу знаний. При разработке программ на Прологе часто используют встроенные предикаты, т.е. предикаты, определяемые автоматически при инициализации интерпретатора Пролога. Встроенные предикаты используются так же, как и определяемые пользователем предикаты. Единственное ограничение – встроенный предикат не может являться головой правила или появляться в факте. Просмотреть все встроенные предикаты можно запросом: ?- op(X,Y,Z).Одним из наиболее часто используемых встроенных предикатов является предикат not/1 (отрицание). Этот предикат истинен, если его аргумент ложен, и наоборот. Пример: Если мы определим правило ложь(X):- not(X).то следующие запросы будут эквивалентны:?- not(больше(собака, лошадь)).Yes;?- ложь(больше(собака, лошадь)).YesДругим часто используемым встроенным предикатом является =/2 (унификация): =(X, Y). Этот предикат допускает более удобную форму записи X = Y. Значение этого предиката истинно, если термы X и Y удается унифицировать. На предикат not/1 похож встроенный предикат \=, зависящий от двух аргументов. Утверждение X \= Y эквивалентно утверждению not(X = Y). Иногда бывает полезно использовать предикаты, про которые заранее известно, истинны они или ложны. Для этих целей используют предикаты true/0 и fail/0. Предикат true всегда истинен, в то время как fail всегда ложен. Встроенный предикат read/1 позволяет считывать термы с клавиатуры. При этом приглашение Пролога ?- меняется на |: (в PIE32 работает по-другому). Вводимый терм должен обязательно заканчиваться точкой. Пример: ?- read(Name), read(Age).|: коля. 15. Name = коляAge = 15Yes?- read(X), больше_2(X,Y).|: осел. X = оселY = собака; X = оселY = обезьяна;NoЕсли при обработке запросов Пролога вы пожелаете получить более подробный вывод, то для этих целей можно использовать предикат write/1. Аргументом этого предиката может являться любой допустимый терм Пролога. В случае, когда аргументом является переменная, будет напечатано ее значение. Выполнение предиката nl/0 осуществляет перевод строки: последующий вывод начнется с новой строки. Предикат tab/1 выводит количество пробелов, определяемое его аргументом (в PIE32 не поддерживается). Пример: ?- write('Hello World!').Hello World!Yes?- write('Hello'), nl, tab(5), write('World!').Hello World!Yes?- X = слон, write(X), nl.слон X = слонYesВ последнем примере сначала переменная X унифицируется с атомом слон, а затем значение переменной X, т. е. слон, выводится на экран при помощи предиката write/1. После перехода на новую строку Пролог выдает отчет об унифицированной переменной, т. е. печатает X = слон. Большинство Пролог-систем, но не PIE32, предоставляет доступ к справочной информации при вызове предиката help/1. Примененный к терму (обычно представляющего имя встроенного предиката) он осуществляет вывод краткого описания этого терма. Пример: ?- help(write).write(+Term) Write Term to the current output, using brackets and operators where appropriate. See feature/2 for contrillong floating point output format. write(+Stream, +Term) Write Term to Stream.YesИ, напоследок, поговорим о комментариях. Комментарии никак не влияют на выполнение программы, но при правильном их использовании они оказываются весьма существенной частью исходного текста. Несколько удачно расположенных строк с комментариями могут оказать человеку, читающему программу, большую помощь. Пролог игнорирует произвольное число строк, заключенное между символами /* и */. Все, что находится между % и концом строки, также рассматривается как комментарий: Пример: /* Это комментарий */% Это тоже комментарий
Дата добавления: 2014-12-27; Просмотров: 544; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |