Flatik.ru

Перейти на главную страницу

Поиск по ключевым словам:

страница 1
5. Лабораторная работа 4

ПОСТРОЕНИЕ ИНТЕРАКТИВНОЙ ОБОЛОЧКИ ДЛЯ НАДЕЖНОЙ ЭКСПЛУАТАЦИИ ИНФОРМАЦИОННОЙ БАЗЫ ЦЕЛЕВОЙ ПРЕДМЕТНОЙ ОБЛАСТИ.
Цель работы: ознакомление с основными принципами организации ввода-вывода в системе SWI-Prolog, построения запросной системы на основе Prolog-интерпретатора и интерактивных средств контроля правильности и достоверности ввода данных в Prolog-систему.
5.1. Теоретические сведения

Отсутствие в Prolog-системах встроенных средств синтаксического и семантического контроля вводимых данных вызывает необходимость разработки специальных запросных средств с использованием встроенных возможностей системы по вводу выводу.


5.1.1. Особенности организации обмена в Prolog-системе

Основные предикаты ввода-вывода термов выполняют обмен атомами, переменными и утверждениями языка Prolog. Термы должны соответствовать стандартному формату, и когда вводятся пользователем, и когда выдаются программой. Ввод терма заканчивается точкой и нажатием клавиши ввода, неинтерпретируемыми как часть терма. Атом, представление которого содержит пробелы, русские буквы или начинается с заглавной буквы,заключаются в апострофы.

Предикат read(-Тerm) используется, чтобы считывать терм со стандартного устройства ввода. Предикат воспринимает точку и знак ввода как конец терма. Предикат read анализирует синтаксис определений операторов. Поэтому вы можете ввести выражение, включающее оператор согласно его определению оператора и read будет транслировать его в префиксную запись.

Предикат write(+Term) используют, чтобы записать терм в стандартном устройстве вывода. Любые несвязанные переменные представляются как знак подчеркивания, за которым следует шестнадцатиричное число. Предикат write распознает синтаксис определений оператора и использует эти определения при отображении терма.

Предикат writeg(+Term) подобен предикату write. Однако, предикат writeg помещает имя атома или функциональный элемент в кавычки, когда необходимо, чтобы этот терм был в форме, приемлемой для предиката read. Предикат writeg также отображает строки внутри ограничителей в виде знаков доллара ($).

Предикат display(+Term) используют, чтобы записать термы в префиксной записи для стандартного устройства вывода без анализа определений операторов, как это делают write и writeg. Следовательно, все термы представляются в префиксной записи.

Предикат get0(-Char) считывает символ из стандартного устройства ввода. Он может быть использован для считывания любого символа или для поиска специального символа. Он возвращает значение символа, если аргументу не приписано значение. Если же аргументу приписано значение, то будет считываться следующий символ.

get(-Char) как и get0, считывает символ из стандартного устройства ввода, но игнорирует неотображаемые символы. Предикат get0_noecho(-Char) считывает символ из стандартного устройства ввода без его отображения на стандартном устройстве вывода.

Предикат skip(+Char) считывает и пропускает знаки, пока не будет найден специальный знак.

Отдельные знаки отображаются предикатом put(+Сhar). Например, вы можете услышать звуковой сигнал терминала по запросу:

?-put(17).

Предикат nl переводит строку на стандартном устройстве вывода.

Предикат tab(+Num) записывает заданное число пробелов (до 255) в стандартное устройство вывода.

Предикат tmove(+Row,+Coloumn) перемещает курсор в заданную позицию текущего окна.


5.1.2. Работа с окнами в системе SWI-Prolog

Окно - это выделенная область экрана, в которой выполняются все текущие операции экрана. Окно может быть размером с целый экран или занимать часть экрана. Любое окно при создании появляется на заднем плане, и переводится на передний, когда становится текущим. Только одно окно может быть текущим и все управление экрана и операции ввода/вывода указывают на это окно. В текущем окне используют следующие предикаты: write, writeg, display, pirt, nl и tab, а также предикаты управления курсором.

Arity/Prolog сопровождает до 32 определенных окон, из которых 5 окон использует интерпретатор, по одному окну - каждый стандартный диалоговый блок и вписанный диалоговый блок. Форма окна вариируется из следующих возможностей: двойной или простой бордюр или без бордюра, включение текста у верхней левой границы окна, использование атрибутов границы и заднего плана окна.

Предикат создания нового окна имеет следующий синтаксис:

define_window(+Name,?Label,?(ULR,ULC),?(LRR,LRC),

?(Window_attr,Border_attr))

Для определения нового окна необходимо задать его имя Name в форме атома. Остальные аргументы могут определяться по умолчанию. Label задает текст, изображаемый в верхнем левом углу границы окна и задаваемый атомом. Пустой атом ('') задает пустой текст. Если окно не имеет границ - этот аргумент игнорируется.

(ULR,ULC) - координаты верхнего левого угла окна, где ULR - позиция начала верхней левой строки со значением от 0 до 23. ULC - позиция верхнего левого столбца в пределах от 0 до 78. По умолчанию принимается значение (0,0). Координата правого нижнего угла окна LRR задает начало нижней строки и может быть числом от 1 до 24. LRC - это позиция нижнего правого столбца и может быть числом от 1 до 79. Значение этого аргумента по умолчанию - (24,79).

Аргумент Window_attr задается целым числом, указывающим цветовые атрибуты фона и текста для изображения окна. Аргумент Border_attr есть целое число, показывающее атрибуты границы окна и тип границы, его значение 0 задает наличие границы. Однолинейная граница задается положительным числом с требуемым номер атрибута, а двухлинейная граница - требуемым номером атрибута со знаком "-". По умолчанию для аргумента (Window_attr, Border_attr) используется значение (7,0), что позволяет увидеть аргументы и их соответствующие числа для вашего терминала с помошью стандартного примера table.ari.

Следующий предикат создает окно реверсного изображения с границей и меткой. Окно помещается на экране в позиции (10,10),(20,5). Окно называется first_window.

?-define_window(first_window,'A window',

(10,10),(20,50),(112, 7)).

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

Предикат текущего окна current_window(-Old,?New) используется для выбора текущего окна, единственного, с которым может работать пользователь. Предикат current_window размещает новое текущее окно впереди всех остальных окон, но не устраняет предыдущее текущее окно с экрана дисплея. Когда в аргументе New задается имя окна, current_window унифицирует Old с текущим окном и делает New новым текущим окном. Окно, специфицированное в параметре New, должно быть заранее создано предикатом define_window.

?-current_window(_,new_window).

Когда аргумент New унифицируется, current_window возвращает имя текущего окна к New. Например:

?-current_window(X,X).

X=first_window.

Предикат hide_window(-current,+New) задает новое текущее окно и удаляет существующее текущее окно с экрана. Первый аргумент задает имя текущего окна. Если аргументами для current заданы переменные, тогда возвращается имя существующего текущего окна. Аргумент New - это имя окна, которое нужно сделать текущим. Например, чтобы выбрать window3 новым текущим окном и устранить существующее текущее окно с экрана, наберите на клавиатуре:

?-hide_window(Cur,window3).

Cur=window1->.

При использовании предиката hide_window (скрыть окно) из интерпретатора управление возвращается интерпретатору после того, как будет завершена обработка утверждения, содержащего предикат hide_window.

Предикат what_windows(-Name) возвращает путем просмотра с возвратами имена всех существующих окон. Например:

?-what_windows(N).

N=main->;

N=app_winodow->;

N=heip_window->;

no

Предикат resize_window(+Rows,Columns) используется для изменения размеров текущего окна. Первый аргумент задает целое число строк, добавляемых или убираемых из текущего окна. Второй аргумент задает целое число столбцов, добавляемых или удаляемых из нижнего правого угла окна. Отрицательное число задает удаление.



Помните, что размер нового окна должен соотвeтствовать размерам экрана, иначе предикат resize_window дает сбой. Например: следующий запрос уменьшает текущее окно на 3 строки и добавляет 10 столбцов:

?-resize_window(-3,10).

Предикат move_window(+Rows,+Columns) используется для перемещения текущего окна. Аргументы задают целые числа переноса относительно базовых направлений сверху вниз и слева напрво. Помните, что новое окно должно быть расположено в пределах размеров экрана, иначе предикат move_window даст сбой. Например, следующая запись перемещает окно на 3 ряда вниз и на 5 колонок влево:

?-move_window(3,-5).

Предикат relabel_window(+Label) используется, чтобы изменить метку для текущего окна. Аргумент Label является атомом, который должен быть расположен в верхнем левом углу окна.

Например:

?-relabel_window('Anewlabel').

Предикат recolor_window(+Window_attr,+Border_attr) меняет цвет фона или текста и атрибуты границы для текущего окна. Аргументы имеют тот же смысл, что и в предикате define_windows/5.

Предикат store_windows/0 сохраняет текущее состояние окон, которое может быть восстановлено предикатом refresh/0. Этот предикат удобно использовать в том случае, когда программы взаимодействуют с другим языком программирования, изменяющим изображение на экране. Подобные вставки функций побочного языка желательно обрамлять предикатами store_windows и refresh.

Для стирания окна используется предикат delete_window(+Name), где аргумент - это имя окна, которое вы хотите удалить, кроме главного окна (main). После удаления текущего окна главное окно становится текущим.

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

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

Всплывающее окно создается предиката create_popup и удаляется предикатом exit_popup. Ни один из предикатов окон, такие как recolor_window (перекрасить окно) или delete_window (стереть окно), не может быть использован, пока отображено всплывающее окно.

Для создания всплывающего окна используется предикат create_popup. Его формат:

create_popup(?Label,?(ULR,ULC),?(LRR,LRC),

?(Window_attr,Border_attr)).

Аргументы для create_popup соответствуют одноименным аргументам предиката define_window.

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

?-create-popup('',(15,15),(23,55),(112,7)).

Предикат exit_popup используется для удаления всплывающего окна после того, как обработка в пределах всплывающего окна завершена. После этого восстанавливается предыдущее текущее окно. Например, следующий предикат использует create_popup для создания всплывающего окна и exit_popup - для его удаления:

help_window1:-

create_popup('',(15,15),(23,55),(112,7)),

tmove (2,2), write ($итоги формата предиката$),

tmove (3,5), write($записанный предикат:),

tmove (4,5), write($записанный(+ключ,?терм,-ссылка)$),

tmove (6,10), write($нажмите любую клавишу, чтобы продолжить$),клавиша6(_,_),

exit_popup.

Интерпретатор системы SWI-Prolog автоматически начинает работу с главного окна. При разработке прикладных программ окна создаются предикатом define_window и переводятся в режим текущих предикатами current_window и hide_window. При работе в интерпретаторе ввод-вывод сначала выполняется через главное окно, а затем через текущее. Для выхода из окна используется встроенный предикат keyb, предназначенный для того, чтобы пользователь мог выйти из окна нажатием клавиши:

end_test :- write($ Press any key to exit $), keyb(_,_).

При использовании нескольких окон удобно создать отдельное окно размером в экран вместо главного. В этом случае диалог прикладной программы не будет смешиваться с диалогом главного окна.

background_window:-define_window(back,'',(0,0),(24,79),(7,0)), current_window(_,back).

Перед завершением программы его нужно удалить предикатом delete_window, после чего ввод-вывод будет дальше вестись через главное окно.


5.1.3. Анализ синтаксиса и семантики аргументов предикатов

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

На уровне запросов в рамках базовой системы SWI-Prolog к синтаксису можно отнести типы вводимых термов и других элементов встроенной БД в эталонном примере приведена процедура семантической подсказки form_goal. Подобным образом может быть построена процедура синтаксической проверки правильности запросов.
5.1.4. Базовые элементы реляционной алгебры

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

Операции реляционной алгебры включают 5 базовых операций [5], которые в Prolog-системе задаются следующими правилами.

1. Объединение:

r_union_s(X1,X2,...,Xn) :- r(X1,X2,...,Xn).

r_union_s(X1,X2,...,Xn) :- s(X1,X2,...,Xn).

2. Симметрическая разность:

r_diff_s(X1,X2,...,Xn) :- r(X1,X2,...,Xn), not s(X1,X2,...,Xn).

r_diff_s(X1,X2,...,Xn) :- r(X1,X2,...,Xn), not s(X1,X2,...,Xn).

3. Декартово произведение:

r_x_s(X1,X2,...,Xmn) :- r(X1,X2,...,Xm), s(Xm1,Xm2,...,Xmn)

4. Проекция:

r1n(X1,Xn) :- r(X1,X2,...,Xn).

5. Выборка:

rс(X1,X2,...,Xn) :- r(X1,X2,...,Xn), condition(X1,X2,...,Xn).

Из широкого ряда производных операций чаще всего используется:

6. Пересечение:

r_meet_s(X1,X2,...,Xn) :- r(X1,X2,...,Xn), s(X1,X2,...,Xn).

Использование подобных правил в редактирующей интеллектуальной оболочке Prolog-системы может послужить основой для построения CASE-системы (computer aided system engenering) для создания ИС на базе языка Prolog.
5.1.5. Предикаты преобразования объектов

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

Struct=..List.

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

?-tree(oak,seed(acorn))=..X.

X=[tree,oak,seed(acorn)].

Чтобы преобразовать список в структуру можно набрать:

?-X=..[tree,oak,seed(acorn)].

X=tree(oak,seed(acorn)).

Этот предикат удобно использовать, когда к структуре дополняются новые аргументы. Они могут быть добавлены к структуре предикатом add_args, определенным ниже. Предикат преобразования используется дважды: для прямого и обратного преобразования.

add_args(Struct,ArgList,NewStruct):- Struct=..List,

append(List,ArgList,NewList), NewStruct=..NewList.

append([],L,L).

append([H|T],L,[H|T]):-append(T,L,T1).

Вы можете использовать add_args для дополнения третьего аргумента к структуре книги,как показано ниже:

?-add_args(book(pooh,milne),[aa],X).

X=book(pooh,milne,aa).

Предикат анализа функтора functor(?Struct,?Name,?Arity) анализирует структуру и возвращает название структуры и арность. Например, функтор разбирает структуру книги как показано ниже:

?-functor((book(pooh,milne,aa)),X,A).

X=book,


A=3.

Если аргумент Struct не определeн, предикат functor создаeт структуру, имеющую специфицированные Name и Arity (максимум 255). Аргументы структур могут быть несвязанными переменными.

Предикат arg(+N,+Term,-Value) возвращает значение N-го, начиная от 1 аргумента структуры Term. Например, возвратить первый аргумент структуры книги можно следующим запросом:

?-arg(I,book(poetry,milne),X).

X=poetry.

Предикат arg также используется для связывания переменных в структуре. Предикат Arg0(+N,+Term,-Value) идентичен предикату arg, но в отличие от него, аргументы нумеруются, начиная с 0.

Предикат argrep(+Term,+N,+Arg,-NewStruct) заменяет аргумент в структуре Term новым аргументом Arg и возвращает новую структуру в четвертом аргументе. Например, для замещения в структуре student(alan,soph,95) и аргумента 95 на 88 выполняется запрос:

?-argrep(Student(alan,soph,95),3,88,X).

X=Student(alan,soph,88)

Заметим, что argrep не изменит терм в БД, он только возвращает новую структуру в NewStruct.

Предикат name(?Atom,?List) преобразует атом или целое число в список символов или список в атом, зависящий от того аргумента, который подвергается обработке. Когда Atom - это атом, List преобразуется в список кодов ASCII, который создает символ в названии атома. Когда атом целое число, List формируется как список кодов ASCII для отображения целого числа. Когда List задан как список в коде ASCII, создается название атома. Если оба аргумента определены name проверит их равенство. Например:

?-name(quiche,L).

L=[113,117,105,99,104,101]

Yes


?-name(X[114]).

X=r


Предикат length(+List,-N) определяет длину списка. Аргумент List должен иметь значение в виде списка определенной длины. N - задается переменной, в которой length возвращает длину списка. Например, при наличии списка символов этот предикат выполняет следующие действия:

?-length("tennis",N).

N=6.

5.1.6. Операторы для анализа базы знаний

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

БЗ их название и арность не должна совпадать с ключами для тех термов, которые хранятся в такой же среде.

Предикат clause(+Head,-Body) унифицирует Head с заглавием оператора и унифицирует Body с телом предложения. Аргумент Head должен быть подтвержденным. Операторы блока дают атомы true как их тела. Предикат clause при поиске с возвратом, возвращает все операторы процедуры, которые определяются c помощью Head и Body.

Предикат asserta(+Clause) добавляет утверждение, заданное в аргументе, в начало соответствующей процедуры. Если специфицируемое утверждение не имеет тела, asserta определяет тело true. Этот предикат помогает вам контролировать порядок, в котором утверждения размещаются в БЗ. Например, если вы введете второй оператор предиката append, а не первый, вы можете использовать asserta для добавления первого оператора БД в его подходящее место:

?-asserta((append([],X,X)))

Дублирование круглых скобок, используемое в asserta, вызвано приоритетом оператора ':-'.

Предикат assertz(+Clause) добавляет утверждение в конец процедуры и по синтаксису совпадает с asserta. Предикат assert(+Clause) совпадает с assertz.

Предикат retract(+Clause) исключает все операторы из БЗ специфицируемых названием и парностью.
5.2. Описание эталонных программ

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


5.3. Вопросы для самопроверки

1. Какими предикатами изменяются режимы окон?

2. Какие предикаты используются для обмена данными с основными устройствами?

3. Каким образом выполняются взаимные преобразования структур и списков?

4. Как анализируются утверждения и структуры в системе SWI-Prolog?
5.5. Задание на работу

1. Составить программу синтаксического контроля вводимого терма с предварительной подсказкой синтаксического типа терма.

2. Построить программу для задания вопроса по групповым отношениям с использованием отношений реляционной алгебры в соответствии с номером бригады по п. 5.1.4. Для бригад с номером больше 6 вычитать шестерку из номера бригады.

3. Пользуясь базовой процедурой эталонной программы построить БД описания семантики в Prolog-системе, представляющую информацию о заданной БЗ в соответствии с вариантами п. 2.3. в работе 1.

4. Составить процедуры реконфигурации фактической части БД, дополнительными полями (аргументами).

5. Составить процедуру перевода фактической БД из последовательности фактов в список аргументов.

6. Проверить правильность составленных программ.

7. Занести в базу знаний дополнительные факты для процедур.


5.6. Текст эталонной программы

% Базовая программа работы 4

lab4:-cls,repeat,in_term(X),analiz(X,Y),true.

% Очистка экрана, ввод терма и запрос предиката для анализа терма.

in_term(X):-create_popup('Input term, please:',

(8,7),(15,60),(14,3)),read(X),exit_popup.

% Определение всплывающего окна с запросом ввода терма, чтение

% вводимого терма и выход из всплывающего окна.

analiz(X,Y):-X=..[F|L],create_popup('Functor:',

(2,7),(4,60),(14,3)),write(F),

create_popup('Arguments:',(6,7),(23,75),(14,3)),

writeq(L),nl,anal_arg(L,Y),get0(B),exit_popup,

exit_popup.

analiz(X,Y):-true.

% Выделение в введенном терме функтора и аргументов.

% Функтор отображается в отдельном окне, затем происходит запрос

% предиката anal_arg для анализа корректности аргументов.

anal_arg([L|Ls],Y):-an_term(L,Y),anal_arg(Ls,Y).

anal_arg([],Y).

% Предикат anal_arg построен рекурсивно для последовательного

% анализа термов из списка, начиная с головы списка.

an_term(L,Y):-nl,writeq(L),tget(R,C),tmove(R,15),

bagof(_,a_term(L),_).

an_term(L,Y):-err_win('Unknown type'),true.

% Анализ термов выполняется с помощью предиката bagof, собирающего все экземпляры успешного выполнения цели a_term.

a_term(L):-atom(L),tget(R,C),C1 is C+1,tmove(R,C1),

write(' Atom ').

a_term(L):-atomic(L),tget(R,C),C1 is C+1,tmove(R,C1),

write(' Atomic ').

a_term(L):-float(L),tget(R,C),C1 is C+1,tmove(R,C1),

write(' Float ').

a_term(L):-integer(L),tget(R,C),C1 is C+1,tmove(R,C1),

write(' Integer ').

a_term(L):-number(L),tget(R,C),C1 is C+1,tmove(R,C1),

write(' Number ').

a_term(L):-string(L),tget(R,C),C1 is C+1,tmove(R,C1),

write(' String(length='),string_length(L,Ln),

write(Ln),write(') ').

a_term(L):-var(L),tget(R,C),C1 is C+1,tmove(R,C1),

write(' Variable ').

a_term([L|Ls]):-length([L|Ls],Ln),Ln=\=1,tget(R,C),C1 is C+2,

tmove(R,C1),write('List(length='),write(Ln),

write(')').

a_term(L):-functor(L,N,A),A=\=0,tget(R,C),C1 is C+1,tmove(R,C1),

write(' Structure(arity='),write(A),write(')').

%

err_win(A):-create_popup('',(19,15),(22,65),(12,7)),write(A),



get0(B),exit_popup.

% ?-query(Name) :- Запросить выполнение процедуры с заданным именем в форме "вопрос-ответ"

query(N) :- form_goal(N,_,Z),call(Z).

query(N,A) :- form_goal(N,A,Z),call(Z).

% form_fact :- Должна приводить к коррекции фактов в процедуре

form_fact(N) :- form_goal(N,_,Z), assert((Z)).

form_fact(N,A) :- form_goal(N,A,Z), assert((Z)).

% form_fact :- Должна приводить к выдаче семанически правильных термов

form_goal(N,A,Z):- pict(N,A,Lb), dialrd(A, Lb, La),

Z=..[N|La], write(Z).

% Ввод списка по запросам

dialrd(0, [], []).

dialrd(A, [X|L], La) :- A1 is A-1, dial(X,Y),

dialrd(A1, L, La1), La=[Y|La1].

% Ввод-вывод в такущем окне

dial(X,Y) :- write(X), write('='),

read(Y).

% Процедура шаблона для семантических программ

pict(p_module,6,['имя модуля',

'количество точек входов',

'входной язык программирования',

'имя файла исходного текста',

'имя объектной библиотеки',

'размер модуля в памяти в байтах']).

pict(entry_point,6,['имя модуля',

'содержание результата',

'имя точки входа',

'спецификация параметров',

'max время выполнения',

'среднее время выполнения']).

pict(pict,3,['имя факта',

'количество аргументов',

'список аргументов']).

% Контрольные процедуры: характеристики модулей

p_module(sin,2,assembler,'sin.asm','SLIBCE.LIB',37).

p_module(sin,2,_,_,'SLIBCE.LIB',37).

% Характеристики входной точки

entry_point(sin,'синус',sin,double(1,double),155,140).

entry_point(sin,'косинус',cos,double(1,double),155,140).

% Выбор функции



func(A,X,Y):-

entry_point(_,A,X,_,_,_), module(X,_,_,_,Y,_).

Лабораторная работа 4 построение интерактивной оболочки для надежной эксплуатации информационной базы целевой предметной области

Цель работы: ознакомление с основными принципами организации ввода-вывода в системе swi-prolog, построения запросной системы на основе Prolog-интерпретатора и интерактивных средств

143.59kb.

10 09 2014
1 стр.


Лабораторная работа №1 Тема работы: Ознакомление с принципами организации и эксплуатации базовой Prolog-системы

Цель работы: ознакомление с основными возможностями системы swi-prolog, правилами эксплуатации интерпретатора и заполнения информационной базы

109.4kb.

15 10 2014
1 стр.


Лабораторная работа №1 по курсу "Информационная безопасность" Лабораторная работа №1

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

118.45kb.

10 10 2014
1 стр.


Контрольно-пропускной режим на предприятии часть 1

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

214.77kb.

06 10 2014
1 стр.


Описание предметной области

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

170.83kb.

13 10 2014
1 стр.


Лабораторная работа №1 Работа в Oracle Database Express Edition 1 Лабораторная работа №6

Лабораторная работа Выполнение расчетов с использованием программирования в среде Visual Basic for Applications

232.43kb.

18 12 2014
1 стр.


Методы формализации знаний о предметной области понятийная структура предметной области

Охватывает все виды контактов между ними. Текстологические методы предназначены для извлечения знаний из текстов

894.42kb.

29 09 2014
6 стр.


Создания информационной базы данных корпоративной сети

Цель: Получить навыки создания общей реляционной базы данных для использщования в сетевом пространстве

256.92kb.

13 10 2014
1 стр.