Файл: Предметная область или Универсум совокупность всех предметов, которые она изучает. Литерал.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 30.11.2023
Просмотров: 28
Скачиваний: 2
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ный оператор и читается как «юнив» (univ). Цель Term =.. List является истинной, если List — список, содержащий главный (самый внешний) функтор терма Term, за которым следуют его
параметры.
• functor(?Term, ?Functor, ?Arity)
Предикат выдает истину, если терм Term имеет функтор Functor и его арность равна Arity.
• arg(?N, +Term, ?Value)
Предикат выдает истину, если терм Term является составным и его N-ый по-порядку аргумент (нумерация идет с 1) унифицируется с Value.
• name(?AtomOrInt, ?List)
Предикат выдает истину, если List есть список кодов ASCIIсимволов, составляющих первый аргумент (атом или число).
Ввод и вывод
Существуют текущие входной и выходной потоки. По умолчанию текущим входным потоком считается клавиатура, а выходным потоком — экран. Переключение между
потоками осуществляется с помощью процедур:
• see (+File) — файл становится текущим входным потоком;
• tell (+File) — файл становится текущим выходным потоком;
• seen — закрывается текущий входной поток;
• told — закрывается текущий выходной поток.
Файлы читаются и записываются двумя способами: как последовательности символов и как последовательности термов.
Встроенные процедуры для чтения и записи символов и термов таковы:
• read(-Term) — вводит следующий терм;
• write(+Term) — выводит Term;
• put(+Char) — выводит символ, Char должно быть целочисленное выражение, значение которого есть код ASCII или атом в виде одной литеры;
• get0(–КодСимвола) — вводит следующий символ;
• get(–КодСимвола) — вводит ближайший следующий «печатаемый» символ.
Характерной особенностью Пролога является эквивалентность программ и данных — и то и другое представлено логическими термами.
Смысл встроенного предиката call(X) в Прологе состоит в передаче терма X в качестве цели.
Доступность метапеременных означает, что в качестве целей в конъюнктивных вопросах и в теле предложений разрешается использовать переменные. В процессе вычисления, в момент обращения к такой переменной, ей должно быть сопоставлено значение — терм.
Информация о фактах, которые не являются истинными, или об отношениях, которые не соблюдаются, называется негативной.
Если правило P не представлено в текущей программе, то считается, что представлено отрицание P.
Множество предложений текущей программы называется миром. Это — замкнутый мир, поскольку интерпретатор ведет себя так, как-будто бы в этом мире содержатся все возможные знания.
предположение об открытости мира
:
если правило P отсутствует в текущей программе, то считается, что P ни истинно, ни ложно.
запрос может обладать одним из трех допустимых истинностных значений: истина, ложь или неизвестно. Если запрос признан неизвестным, то программа может предпринять какие-то особые действия. По умолчанию интерпретатор языка Пролог руководствуется предположением о замкнутости мира. Поэтому если требуется, чтобы поведение программы соответствовало предположению об открытости мира, то это нужно выражать в
явном виде при составлении программы.
Программирование второго порядка
Программирование на Прологе расширяется введением методов, отсутствующих в модели логического программирования.
Эти методы основаны на свойствах языка, выходящих за рамки логики первого порядка. Они названы методами второго порядка,поскольку речь здесь идет о множествах и их свойствах, а не об отдельных элементах.
Предикат findall(+Var, +Goal, -Bag) создает список всех конкретизаций переменной Var, полученных при бэктрекинге (перебор с возвратом) при выполнении цели Goal, и
унифицирует результат с Bag. Bag — пустой список, когда Goal не имеет решения.
Предикат apply(+Term, +List) присоединяет элементы списка List к аргументам терма Term и вызывает полученный терм в качестве цели. Например, apply(plus(1),[2,X]) вызывает plus(1, 2, X)
Предикат checklist(+Pred, +List) проверяет все ли элементы списка List удовлетворяют предикату Pred.
Операции с базой данных
База данных, в соответствии с реляционной моделью баз данных, представляет собой спецификацию набора отношений.
Любая Пролог-программа может рассматриваться как подобная база данных; в ней спецификация отношений частично является явной (факты), а частично неявной (правила).
Некоторые встроенные предикаты позволяют модифицировать эту базу данных во время выполнения программы.
Предикат assert(+Term) добавляет факт или правило в программу (в базу данных в оперативной памяти). Term добавляется как последний факт или правило соответствующего предиката.
При выполнении предиката retract(+Term), когда терм Term унифицируется с первым подходящим фактом или правилом в базе данных, факт или правило удаляется из базы данных.
Предикат retractall(+Term) удаляет все факты или правила в базе данных, которые унифицируются с Term.
Те предикаты, которые будут добавляться или изменяться с помощью предикатов assert и retract, необходимо объявить в программе как динамические. dynamic
Предикаты asserta и assertzпредоставляют возможность управлять позицией вставки:
asserta добавляет в начало базы данных, а assertz (так же как и assert) — в конец.