Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
2013_1 / ОТС / promet.pdf
Скачиваний:
142
Добавлен:
23.02.2015
Размер:
683.47 Кб
Скачать

renamefile(+OldDOSFileName, +NewDOSFileName) – пере­ именование файла;

disk(?DOSPath) – установка/запрос текущего пути доступа. В языке SWI-Prolog имеются следующие средства:

see(+ScrDest) – установить текущий входной поток из файла;

tell(+ScrDest) – установить текущий выходной поток в новый файл;

append(+ScrDest) – установить текущий выходной поток в старый файл;

seeing(?ScrDest) – запрос имени текущего входного файла;

telling(?ScrDest) – запрос имени текущего выходного файла;

seen – закрыть входной файл;

told – закрыть выходной файл.

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

5.3. Текстовые окна и управление экраном

Для более эффективного использования площади экрана дис­ плея в программах языке на Turbo-Prolog можно создавать тексто­ вые окна, куда направляется выдача сообщений и откуда считыва­ ются данные, вводимые с клавиатуры. Этому служат следующие предикаты:

makewindow (+WNo, +ScrAttr, +FrameAttr, +Heder, +Row, +Column, +Height, +Width) – создание окна с номером WNo, с атрибутами экрана ScrAttr и рамки FrameAttr , с заголовкомстрокой Header , с координатами левого верхнего угла Row и Column и размерами по высоте Height и ширине Width . Но­ мер окна может быть произвольным числом и служит для ссылки на него в других предикатах. ScrAttr из [0,255]; FrameAttr из [0,7]; Row, Height из [1,25]; Column, Width из [1,80];

shiftwindow(?WNo) – установка/запрос номера текущего окна;

clearwindow – очистка текущего окна;

removewindow – удалить текущее окно;

window_attr(+Attr) – установка атрибутов текущего окна;

window_str(?ScrStr) – вывод/чтение содержимого окна в строковую переменную;

scr_char(+Row, +Column, ?Char) – вывод/чтение символа окна;

scr_attr(+Row, +Column, ?Attr) – установка/запрос атрибутов знакоместа;

field_str(+Row, +Column, +Length, ?String) – вывод/чтение поля заданной длины;

field_attr(+Row, +Column, +Length, ?Attr) – вывод/чтение атрибутов поля заданной длины;

cursorform(+StartLine, +EndLine) – установка зоны для кур­ сора внутри знакоместа. StartLine, EndLine из диапазона [1,14];

attribute(?Attr) – установка/запрос атрибутов всего экрана.

5.4. Обработка строк и преобразование типов

Для манипулирования со строками символов язык Turbo-Prolog включает ряд предикатов:

frontchar(+String1, ?Char, ?String2) – отделение символа Char от строки String1, остаток помещается в String2;

fronttoken(+String, ?Token, ?Rest) – отделение слова Token от строки String, остаток помещается в Rest;

frontstr(+Length, +InpString, –StartString, –RestString)

отделение подстроки StartString длиной Ltngth от строки InpString, остаток помещается в RestString;

concat (?Str1, ?Str2, ?Str3) – сцепление строк Str1, Str2 с по­ мещением результата в Str3;

str_len(+String, ?Length) – вычисление длины строки;

isname(+String) – проверка синтаксиса имени.

Следующие предикаты позволяют преобразовывать данные различных типов:

char_int(?Char, ?Int) – преобразование символа в число и наоборот;

str_int(?Str, ?Int) – преобразование целого числа в строку;

str_char (?Str, ?Char) – преобразование односимвольной строки "X" в символ 'X';

str_real(?Str, ?R) – преобразование строки в число;

upper_lover(?Str1, ?Str2) – преобразование символов верх­ него и нижнего регистров;

Для манипулирования со строками символов язык SWI-Prolog включает ряд предикатов:

atom_chars(?Atom, ?String) – преобразование атома в стро­ ку и обратно;

number_chars(?Number, ?String) – преобразование числа в строку;

concat(?Atom, ?Atom, ?Atom) – сцепление атомов как строк;

string_concat(?String, ?String, ?String) – сцепление строк.

5.5. Базы данных

Системы Turbo- и SWI-Prolog перед исполнением программ транслирует их текст во внутреннее представление, что затрудняет модификацию программ во время исполнения. Поэтому в языке предусмотрены базы данных, являющиеся хранилищами множе­ ства фактов в смысле определений, данных ранее. Для манипули­ рования динамическими базами фактов имеется ряд стандартных предикатов:

asserta(+Term) – добавить в начало базы данных факт, за­ даваемый термом;

assertz(+Term) – добавить в конец базы данных факт, зада­ ваемый термом;

retract(+Term) – удалить из базы данных первое вхождение факта, задаваемого термом;

consult(+DOSFileName) – загрузить базу данных из файла;

save(+DOSFileName) – сохранить базу данных в файле (только Turbo-Prolog).

Для использования баз данных в SWI-Prolog не требуется до­ полнительных описаний, а в Turbo-Prolog их состав должен быть описан в декларативной части программы. Базы данных описывают­

ся после доменов перед предикатами программы. Описание баз данных начинается служебным словом "database". Состав базы данных определяется аналогично описанию предикатов вида:

<имяпредиката>(<имядомена1>, ... ,<имядоменаn>),

где имена доменов определяют тип соответсвующего параметра предиката, например:

database

person(string, integer, string, string) proffes(string, real)

В приведенном примере первый параметр предиката person строкового типа может определять фамилию и инициалы человека, второй – возраст, третий – должность, четвертый – адрес и теле­ фон. Например, предикат assertz(person("Петров И.С.", 37, "води­ тель трамвая", "620000, Свердловск, Кирова, 70. тел. 55–17–00")) добавит в базу данных новый факт.

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

findall(+Var, +Atom, –ListVar), где Var определяет имя перемен­ ной, которая помещается в список ListVar , если найден факт, за­ данный вторым параметром Atom, например:

findall(Age, person(_, Age, _, _), L).

5.6. Вспомогательные средства

Среди вспомогательных средств языка Пролог имеются:

trace/untrace – включить/выключить режим трассировки для всех предикатов;

trace(+Pred) – включить режим трассировки для указанного предиката;

true – удача;

fail – неудача.

Дополнительно в языке Turbo-Prolog к этой категории средств отнесятся:

exit – выход в главное меню системы;

edit(+InputString, –OutputString) – редактирование входной строки средствами экранного редактора Системы и помеще­ ние результата в выходную строку. Завершение редактиро­ вания производится нажатием клавиши "ESC" или "F10";

editstring(+InStr, –OutStr, +LeftHeader, +RightHeader, +Message, +HelpFile, +Pos, –Code) – редактирование вход­ ной строки средствами экранного редактора системы и по­ мещение результата в выходную строку. Завершение редак­ тирования производится нажатием клавиши "ESC" или "F10". Выдаются два заголовка LetfHeader, RightHeader. Курсор устанавливается в позицию Pos во входной строке InStr. Со­ общение Message выводится в нижней части окна. При нажа­ тии клавиши "F1" выводится сожержимое файла HelpFile. Code = 0, если выход из редактора призводится нажатием клавиши "F10" и Code = 1, если нажатием "ESC";

display(+String) – выдать строку в текущее окно;

dir(+Path, +FileSpec, –FileName) – вызов команды выдачи оглавления с выбором имени файла по меню. Например, dir("c:\user","*.pro",File);

date(?Year, ?Month, ?Day) – запрос/установка даты;

time(?HH, ?MM, ?SS, ?CC) – запрос/установка времени;

system(+DOSComand) – выход в DOS для исполнения ко­ манды.

В системе SWI-Prolog имеются дополнительные предикаты:

help(<тема>) – запрос помощи по указанной теме (предикат или функция);

apropos(<тема>) – запрос помощи по контексту;

load_files(+Files, +Options) – загрузить файлы в базу дан­ ных;

repeat – бесконечный цикл;

get_time(–Time) – запрос времени;

convert_time(+Time, –Year, –Month, –Day, –Hour, –Minute, –Second, –Msec) – преобразование времени;

exist_file(+File) – проверка наличия файла;

delete_file(+File) – удалить файл;

chdir(+Path) – изменить рабочий каталог;

Соседние файлы в папке ОТС