Инструменты пользователя

Инструменты сайта


examination:flp:question51

Содержание

deletefile

Предикат deletefile удаляет файл, заданный его аргументом, и имеет формат:

 deletefile(OSFileName) % (i)

Предикат deletefile даст ошибку, если не сможет удалить файл. OSFileName не может содержать подстановочные символы.

database

Внутренняя база фактов состоит из фактов, которые вы можете непосредственно добавлять и удалять из вашей программы на Прологе во время ее исполнения. Вы можете объявлять предикаты, описывающие внутреннюю базу данных в разделе database программы и применять эти предикаты таким же образом, как используются предикаты, описанные в разделе predicates.

Для добавления новых фактов в базу данных в Прологе используются предикаты insert, asserta, assertz, а предикаты retract и retractall служат для удаления существующих фактов. Вы можете изменить содержание вашей базы фактов, сначалa удалив факт, а потом вставив новую версию этого факта (или совершенно другой факт). Предикаты consult/1 и consult/2 считывают факты из файла и добавляют их к внутренней базе данных, a save/1 и save/2 сохраняют содержимое внутренней базы фактов в файле.

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

Ключевое слово database определяет начало объявления раздела database. Раздел database состоит из последовательности объявлений предикатов, описывающих соответствующую внутреннюю базу фактов. Во время выполнения можно с помощью предикатов assert и assertz добавлять факты (но не правила) в базу фактов. Или, вызвав стандартный предикат consult, вы можете извлечь добавляемые факты из файла на диске. Раздел database может выглядеть так, как в следующем примере:

 domains
    name,address=string
    age=integer
    gender=male; female
 database
    person(name,address,age,gender)
 predicates
    male(name,address,age) 
    female(name,address,age)
    child(name,age,gender)
 clauses
    male(Name,Address,Age):-
       person(Name,Address,Age,male).
       ...

В этом примере вы можете использовать предикат person таким же образом, как используются другие предикаты (male, female, child). Единственное отличие состоит в том, что вы можете добавлять и удалять факты для предиката person во время работы программы.

Следует отметить следующие два ограничения на предикаты, объявленные в разделе фактов: разрешается добавлять в базу данных только факты, но не правила; факты базы не могут содержать свободные переменные.

Допускается наличие нескольких разделов database, но для этого нужно явно указать имя каждого раздела database.

 database - mydatabase
    myFirstRelation(integer)
    mySecondRelation(real,string) 
    myThirdRelation(string)
    /* etc. */

Описание раздела database с именем mydatabase создает базу данных фактов с именем mydatabase. Если вы не даете имени внутренней базе фактов, то по умолчанию ей присваивается стандартное имя dbasedom.

На следующем шаге мы рассмотрим использование внутренних баз фактов.


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

Предикаты, принадлежащие внутренней базе фактов, доступны точно так же, как и другие предикаты. Единственное видимое различие состоит в том, что объявления таких предикатов расположены в разделе database вместо раздела predicates. В следующем примере:

 domains
    name=string
    sex=char
 database
    person(name,sex) 
 clauses
    person("Helen",'F').
    person ("Maggie",'F').
    person("Suzanne",'F').
    person("Per",'M').

вы можете вызвать person с целью person (Name,'F') для нахождения всех женщин, или person («Maggie»,'F') для проверки того, что женщина по имени Maggie существует в вашей базе данных.

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

dir

Directory - просмотр содержимого текущей директории. Перед выводом ее содержимого запрашивается маска, которая затем используется при выводе имен файлов (отображаются имена только тех файлов, которые удовлетворяют заданной маске). Символы ..\, расположенные в списке файлов, позволяют выйти из текущей директории на предыдущий уровень;

Change dir - задание текущей (рабочей) директории;

Предикат вида dir(Path, FileSpec, Filename) имеет схему потоков данных (i, i, о) и обеспечивает доступ к средствам отображения каталога.

date

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

  date("April",14,1960)

сопоставляется с X и присваивает X значение date(«April »,14, 1960). Также

  date("April",14,1960)

сопоставляется с date(Mo,Da,Yr) и присваивает переменным Mo=«April», Da=14 и Yr = 1960.

diagnostics

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

· Имена предикатов, которые используются; · Является ли предикат локальным, глобальным или определяется внешне; · Является ли предикат детерминированным или недетерминированным; · Размер кода для каждого предиката; · Типы доменов параметров;

examination/flp/question51.txt · Последние изменения: 2014/01/15 08:17 (внешнее изменение)