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

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


examination:flp:question45

Содержание

asserta

Читать билет по database

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

Но время выполнения факты могут быть добавлены во внутреннюю базу данных фактов посредством предикатов: assert, asserta и assertz, или путем загрузки фактов из файла с помощью consult.

   Существует три предиката для добавления одного факта во время выполнения: 
 asserta(the fact) % (i)
 asserta(the fact,facts_sectionName) % (i,i)
 assertz(the fact) % (i)
 assertz(the fact,facts_sectionName) % (i,i)
 assert(the fact) % (i)
 assert(the fact,facts_sectionName) % (i,i)

Предикат asserta вставляет новый факт в базу данных фактов перед имеющимися фактами для данного предиката, a assertz вставляет факты после имеющихся фактов данного предиката. Использование предиката assert дает результат, аналогичный использованию assertz.

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

Первый предикат следующего примера вставит факт о Suzanne, описанный предикатом person, после всех фактов person, хранящихся на текущий момент в памяти. Второй - факт о Michael перед всеми имеющимися фактами предиката person. Третий - факт о John после всех других фактов likes в базе данных фактом likesDatabase, а четвертый вставит факт о Shannon в той же базе данных фактов перед всеми другими фактами likes.

 assertz(person("Suzanne","New Haven",35)).
 assertz(person("Michael","New York",26)).
 assertz(likes("John","money"),likesDatabase).
 asserta(likes("Shannon","hard work"),likesDatabase).

После вызова этих предикатов база фактов будет выглядеть так, как будто вы начали работу со следующими фактами:

 % Внутренняя база фактов - dbasedom
 person("Michael","New York",26).
 %   ...  другие факты person   ... 
 person("Suzanne","New Haven",35).
 % Внутренняя база фактов - likesDatabase 
 likes("Shannon","hard work").
 %   ...   другие факты likes...
  likes("John","money").

Остерегайтесь случайно написать код, утверждающий один и тот же факт дважды. Внутренние базы фактов не предусматривают никакой уникальности, поэтому один и тот же факт может появляться во внутренней базе данных фактов много раз. Однако версию assert с проверкой на уникальность написать очень просто:

 database - people
    person(string,string)
 predicates
    uassert(people)
 clauses
    uassert(person(Name,Address)):-
       person(Name,Address) , 
       !,
       ; % OR
       assert(person(Name,Address)).
      

abs

Функция abs возвращает абсолютное значение своего аргумента.

 abs(X) % (i)

Выражение Z=abs(X) ставит в соответствие Z (если оно свободно) результат, или возвратит успех/неуспех, если Z уже определено. Например:

 Z=abs(-7) % Z  будет равно  7

arctan

Функция arctan возвращает арктангенса от вещественного значения, с которым связано X. Выражение Z=arctan (X) ставит в соответствие Z (если оно свободно) результат,или возвратит успех/неуспех, если Z уже определено. Например:

 Pi=3.141592653,
 Z=arctan(Pi) % Z будет равно 1.2626272556

attribute

Задает цвет текста

Пример:

attribute(1), write("\nThis line is blue"),
attribute(2), write("\nThis line is green"),
attribute(A), A1 = A+2,
attribute(A1), write("\nThis line is red").
examination/flp/question45.txt · Последние изменения: 2014/01/15 08:17 (внешнее изменение)