logo
TurboProlog / Документация / TOM_2

Ellipse/6 Графика

Назначение Рисует сектор эллипса

Обращение ellipse(X,Y,Начугол,Конугол,Xрадиус,Yрадиус)

Домены (integer,integer,integer,integer,integer,integer)

Шаблоны описания (вх,вх,вх,вх,вх,вх)

аргументов

Описание ellipse рисует сектор эллипса текущего цвета с

центром в точке (X,Y) и с горизонтальной и

вертикальной осями, определенными параметром Xрадиус

и Yрадиус, соответственно. Сектор располагается в

углах от Начугол до Конугол. Если Начугол равен 0 и

Конугол равен 360, ellipse нарисует полный эллипс.

Углы в ellipse подобны часовой стрелке, угол в 0

градусов равен 3 часам, угол в 90 градусов равен 12

часам, и т.д..

Смотри arc,circle

envsymbol/2

Назначение Читает значения обозначений 'контекста' операционной

среды

Обращение envsymbol(ОбознКонт,Значен)

Домены (string,string)

Шаблоны описания (вх,вых)

аргументов

Описание envsymbol производит поиск для обозначения ОбознКонст

в области 'контекста' операционной среды. Если

находит, то значение возвращается в Значен; иначе

предикат неудачно завершается.

Неудачное Если обозначение отсутствует в области 'контекста'

завершение операционной среды.

Ошибки Отсутствуют.

Пример

C:\PROLOG >set bgi_path=c:\prolog\bgi

C:\PROLOG >set

COMSPEC=C:\COMMAND.COM

PROSYS=C:\PROLOG\OLD.SYS

PATH=C:\DOS;C:\PROLOG

PROMPT=$p $g

BGI_PATH=c:\prolog\bgi

C:\PROLOG >prolog

+++++++ Диалог +++++++++

Goal: envsymbol(path,PATH)

PATH=C:\DOS;C:\PSYS

1 Решение

Goal: envsymbol(bgi_path,PATH)

PATH=C:\PROLOG\BGI

1 Решение

eof/1

Назначение Контролирует конец файла

Обращение eof(ИмяФайлСимв)

Домены (file)

Шаблоны описания (вх)

аргументов

Описание eof проверяет, не указывает ли указатель текущей

позиции на конец файла. Если да, то eof

согласовывается, иначе предикат дает неудачное

завершение.

Неудачное Не конец файла.

завершение

Ошибки Отсутствуют.

Пример

domains

file = input

predicates

repfile(FILE)

clauses

repfile(_).

repfile(F):-not(eof(F)),repfile(F).

goal

openread(input,"dd.txt"),

readdevice(input),

repfile(input),

readln(L),write(L),nl,

fail.

equals(=)/2

Назначение Оценивает выражения и связывает переменные

Обращение <выражение> = <выражение>

Шаблоны описания (вх,вых)(вых,вх)(вх,вх)(вых,вых)

аргументов

Описание предикат equal всегда пишется ( = ) за исключением

некоторых типов стандартных доменов или структур,

определенных пользователем, включающих функторы или

списки.

(вх,вх)

Проверка на равенство. Если левая часть равна правой,

предикат согласуется.

(вх,вых) (вых,вх)

Если левая и правая части могут быть отождествлены,

происходит связывание и equals согласовывается. Если

отождествление невозможно, то оператор дает неудачное

завершение. В случае арифметической операции

выражения вычисляются и переменные связываются.

(вых,вых)

Если левая и правая части могут быть отождествлены,

происходит связывание и equals согласовывается. Если

объединение невозможно, то equals дает неудачное

завершение.

Пример

domains

dom1 =referencefunci(integer,dom2)

dom2 = string

database

dbPred(dom2, dom1)

goal

asserta(dbpred("November 8 1988", funci(1,"November

8 1988"))),

X = 1,

X1 = X + 7,

S = "November ",

S1 = " 1988 ",

str_int(S2,X1),

concat(S, S2, S3),

concat(S3, S, S4),

DataStruct = funci(_,S4),

Fact = dbPred(S4, DataStruct),

dbpred(_, funci(N, _)),

DataStruct = funci(N, _),

write(Fact).

errormsg/4

Назначение Возвращает две строки по номеру ошибки

Обращение errormsg(ИмяФайл,НомОш,СообщОш,РазъяснОш)

Домены (string,integer,string,string)

Шаблоны описания (вх,вх,вых,вых)

аргументов

Описание errormsg делает доступными файлы со структурой,

подобной структуре файла PROLOG.ERR. Его можно

использовать в предикатах обработки ошибок для

разъяснения причин ошибки.

Неудачное Если номер ошибки не найден.

завершение

Ошибки 1027 Невозможно открыть файл.

Пример

Goal: errormsg("prolog.err",1000,Help,EHelp)

Help=1000 Недопустимый аргумент в 'makewindow'.,

EHelp=Проверьте, чтобы

- номер окна был в пределах от 1 до 127

- НачСтрока + КоличСтр <= количества строк на

экране (обычно 25 или 43)

- НачКолон + КоличКолон <= количества колонок на

экране (обычно 80 или 120)

1 Решение

existfile/1

Назначение Проверяет, существует ли файл в текущем каталоге

Обращение existfile(ИмяФайлDOS)

Домены (string)

Шаблоны описания (вх)

аргументов

Описание existfile согласовывается, если файл ИмяФайлDOS

присутствует в каталоге активного диска (см. disk).

Неудачное Если файл не существует.

завершение

Ошибки Отсутствуют.

Пример

Goal: existfile("dd.txt")

Да

Goal: deletefile("dd.txt")

Да

Goal: existfile("dd.txt")

Нет

existwindow/1

Назначение Проверяет, существует ли окно

Обращение existwindow(НомОк)

Домены (integer)

Шаблоны описания (вх)

аргументов

Описание existwindow согласовывается, если окно, определенное

НомОк, существует.

Неудачное Если окно с номером НомОк не существует.

завершение

Ошибки Отсутствуют.

Пример

Goal: shiftwindow(5)

1005 Означенное окно неизвестно.

Goal: existwindow(5),shiftwindow(5)

Нет

exit/0

Назначение Выполняет exit(0)

Обращение exit

Описание обращение к exit/0 равносильно обращению к exit/1

c КодВых = 0.

Неудачное Действует подобно окончательному неудачному

завершение завершению.

Ошибки Возожны различные ошибки.

exit/1

Назначение Осуществляет выход из программы

Обращение exit(КодВых)

Домены (integer)

Шаблоны описания (вх)

аргументов

Описание Если exit окружена trap, обращение к exit передает

управление этому trap и КодВых передает значение кода

ошибки trap.

Если предикаты trap отсутствуют, выполнение программы

прекращается и управление возвращается в среду Турбо

Пролога или операционной системы. Если программа

запускалась в среде операционной системы, то КодВых

будет иметь значение прерывания операционной системы.

Неудачное Действует подобно окончательному неудачному

завершение завершению.

Ошибки Возможны различные ошибки.

Пример

predicates

readfacts

clauses

readfacts:-consult("mydba.dba"),!.

readfacts:-write("\nОшибка чтения mydba.dba"),

exit(2).

goal

readfacts,

write("База данных загружена").

fail/0

Назначение Всегда вызывает поиск с возвратом

Обращение fail

Описание fail вызывает несогласование предиката и в результате

этого поиск с возвратом.

Неудачное Дает всегда.

завершение

Ошибки Отсутствуют.

Пример

domains

Name,Addr=string

database

person(Name,Addr)

predicates

clear_database

print_all

clauses

clear_database:-retract(person(_,_)),fail.

clear_database.

print_all:-

person(Name,Addr),

write("\nName=",Name,", Adr=",Addr),

fail.

field_attr/4

Назначение Устанавливает или возвращает атрибуты поля

Обращение field_attr(Стр,Кол,Длн,Атр)

Домены (integer,integer,integer,integer)

Шаблоны описания (вх,вх,вх,вх),(вх,вх,вх,вых)

аргументов

Описание (вх,вх,вх,вх)

Если строка Стр и столбец Кол соответствуют позиции в

пределах текущего окна, и поле данной длины Длн,

начинающееся в этой позиции, может быть создано

внутри этого окна, для всех позиций в поле

устанавливается атрибут Атр.

(вх,вх,вх,вых)

field_attr связывает Атр со значением атрибута

первого символа в указанном поле. Количество

символов, занимаемых полем в текущем окне,

определяется аргументом Длн. Как и в случае

(вх,вх,вх,вх), указанное поле должно размещаться в

окне.

Неудачное Никогда не дает.

завершение

Ошибки 1001 Недопустимые значения позиции курсора.

Пример

domains

fname = string

type = int(); str(); real()

row, col, len = integer

database

field(fname,type,row,col,len)

value(fname,string)

predicates

writescr

clauses

writescr:-

field(fname,_,row,col,len),

field_attr(row,col,len,112),

value(fname,str),

field_str(row,col,len,str),

fail.

writescr.

field_str/4

Назначение Пишет или читает строку в поле

Обращение field_str(Стр,Кол,Длн,Строк)

Домены (integer,integer,integer,string)

Шаблоны описания (вх,вх,вх,вх),(вх,вх,вх,вых)

аргументов

Описание (вх,вх,вх,вх)

Записывает значение Строк с позиции, определяемой

координатами Стр,Кол. Эта позиция должна находиться в

пределах текущего окна (см. makewindow и

shiftwindow), и все поле длины Длн, начинающееся в

этой позиции, должно размещаться в пределах текущего

окна. Запись значения зависит от следующих условий:

# Если Строк имеет длину более чем значение Длн, то

будут записаны только первые символы в количестве

Длн.

# Если Строк короче чем значение Длн, то остальные

позиции в поле будут заполнены пробелами.

(вх,вх,вх,вых)

Считывает текст, размещенный в поле Строк. Поле

размером Длн символов начинается в позиции с

координатами Стр и Кол в текущем окне. Как и в случае

(вх,вх,вх,вх), указанное поле должно размещаться в

окне.

Неудачное Никогда не дает.

завершение

Ошибки 1001 Не пpавильное значение куpсоpа.

Пример

goal

field_str(2,5,10,"привет").

filemode/2

Назначение Обеспечивает доступ к двоичным файлам

Обращение filemode(ИмяФайлСимв,РежФайл)

Домены (file,integer)

Шаблоны описания (вх,вх) (вх,вых)

аргументов

Описание filemode выбирает двоичные файлы, в которых РежФайл

определяет режим фаила. (0 = текстовый режим, 1 =

двоичный режим.)

РежФайл = 0 (Текстовый режим)

Символ возврата каретки, CR (ASCII 13) [клавиша ВВОД]

подавляется с помощью программ стандартного ввода

(readchar,readln...). CR помещается перед каждым LF

(переводом строки) предикатами вывода. Символ,

получаемый комбинацией клавиш УПР-Z, и физический

конец файла могут быть признаками конца текстового

файла.

РежФайл = 1 (Двоичный режим)

В этом режиме не производятся никакие преобразования.

В этом режиме для операций ввода может быть

использован только предикат readchar.

(вх,вх)

Устанавливает файлу ИмяФайлСимв режим, указанный в

РежФайл.

(вх,вых)

Возвращает текущий режим файла ИмяФайлСимв в РежФайл.

Неудачное Никогда не дает.

завершение

Ошибки 1018 Файл не откpыт.

1019 Недопустимый режим файла, должен быть 0 или 1.

Пример

domains

FILE = reflexfile

goal

openread(reflexfile,"dd.dba"),

readdevice(reflexfile),

filemode(reflexfile,0),

% Здесь используйте только readchar

closefile(reflexfile).

filepos/3

Назначение Перемещает указатель файла

Обращение filepos(ИмяФайлСимв,ПозФайл,Режим)

Домены (file,real,integer)

Шаблоны описания (вх,вх,вх),(вх,вых,вх)

аргументов

Описание (вх,вх,вх)

filepos выбирает позицию в указанном файле, где будет

иметь место следующая операция обработки файла.

Позиция рассчитывается согласно значению Режим.

--------------------------------------

Режим Позиция

--------------------------------------

0 Относительно начала файла

1 Относительно текущей позиции

2 Относительно конца файла

--------------------------------------

Например, если ПозФайл связан со значением 11 и Режим

связан со значением 0, следующая операция будет в

позиции 11 (относительно начала файла).

(вх,вых,вх)

Возвращает текущую относительную позицию файла от

начала файла. Режим игнорируется при этом Шаблоне

описания аргументов.

При использовании filepos имейте ввиду, что

операционная система при каждом нажатии клавиши ВВОД

в текстовых файлах, генерирует два символа - 'новая

линия' (ASCII 13) и 'перевод строки' (ASCII 10). При

чтении Турбо Прологом строк из таких файлов эти

символы автоматически пропускаются, но их необходимо

учитывать при использовании filepos.

Неудачное Никогда не дает.

завершение

Ошибки 1018 Файл не откpыт.

1070 Невозможно выполнить предикат.

filepos вышел за пределы файла.

Итог: файл расширен за следующую запись.

Пример

domains

file = my_file

predicates

repeat

position

goal

makewindow(2,23,23,"позиция файла",0,40,20,40),

makewindow(1,23,23,"вывод файла",0,0,20,40),

dir("", "*.pro", Filename),

clearwindow,

openread(my_file, Filename),

repeat,

readdevice(my_file),

readchar(Str), position,

write(Str),

eof(my_file).

clauses

repeat.

repeat:-repeat.

position:-

shiftwindow(2),

filepos(my_file, P1, 0),

writef("начальная позиция : %", P1), nl,

shiftwindow(1).

file_str/2

Назначение Записывает из строки или считывает в строку

дисковый файл полностью

Обращение file_str(ИмяФайлDOS,ТекстСтр)

Домены (string,string)

Шаблоны описания (вх,вых),(вх,вх)

аргументов

Описание (вх,вых)

Весь файл ИмяФайлDOS (максимальный размер 64К) будет

считан в строку ТекстСтр.

(вх,вх)

Будет создан новый текстовый файл ИмяФайлDOS,

содержащий текст ТекстСтр.

Неудачное Никогда не дает.

завершение

Ошибки 1026 Размер файла, загружаемого предикатом

file_str, превышает 64К.

1027 Невозможно открыть файл.

1028 Запись в файл невозможна.

Пример

config"old.sys"

predicates

extend(string,string)

getfilename(string,string)

clauses

extend(S,S):-concat(_,".pro",S),!.

extend(S,S1):-concat(S,".pro",S1).

getfilename("",Fname):-dir("","*.pro",Fname),!.

getfilename(X,X1):-extend(X,X1).

goal

comline(X),

getfilename(X,X1),

file_str(X1,S),

textmode(Rows,Cols),

makewindow(1,23,0,"РЕДАКТОР",0,0,Rows,Cols),

editmsg(S,S1,"","","",0,"",Ret),

removewindow,

RET><1,!,

clearwindow,

write("\Введите имя файла для записи: "),readln(NewName),

file_str(NewName,S1).