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

Textwidth/2 Графика

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

Обращение textwidth(ТекстСтрока,Длина)

Домены (string,integer)

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

аргументов

Описание textwidth берет текущий размер шрифта и коэффициент

умножения и возвращает длину строки ТекстСтрока в

пикселах в переменную Длина.

Этот предикат полезен для настройки расстояний между

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

для вывода их на различные графические фигуры и т.д.

Например, для шрифта 8x8 битов и коэффициента

умножения равного 1 (установленного settextstyle)

длина выводимой строки TurboProlog2 будет равна 96

пикселов.

Полезно использовать textwidth для определения длины

строки вместо ручных вычислений. При использовании

этого предиката не требуется модифицировать исходный

текст, когда работаете с различными шрифтами.

Смотри gettextsettings,outtext,textheight

time/4

Назначение Устанавливает или считывает время в системе

Обращение time(Час,Минут,Сек,Сотдолсек)

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

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

аргументов

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

Устанавливает время, используемое внутренними часами

компьютера.

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

Считывает время с внутренних часов компьютера.

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

завершение

Ошибки 1075 Неверные параметры для предиката 'data'.

Пример

Goal: time(H,M,S,T)

H=11, M=30, S=13, T=49

1 Solution

Goal: time(0,0,0,0)

Yes

Goal: time(H,M,S,T)

H=0, M=0, S=6, T=15

1 Solution

trace/1

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

Обращение trace(Состояние)

Домены (symbol)

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

аргументов

Описание Основное использование trace - дать вам возможность

трассировать выбранные части вашего исходного текста

программы без порождения трассировки для частей

программы, которые отлажены.

(вх)

trace изменит режим трассировки на on (вкл) или off

(выкл), установленных значением Состояние.

Состояние = on Включить режим трассировки.

Состояние = off Выключить режим трассировки.

Одна из двух директив компилятора trace или

shorttrace должны быть вначале исходного текста

программы для выполнения этих предикатов.

(вых)

Связывает Состояние с on или off, показывающих будет

ли выполняться трассировка или нет.

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

завершение

Ошибки Нет ошибок.

Пример

goal

trace(off),

works_already(X, Z),

trace(on).

trap

Назначение Тормозит (останавливает) выход, прерывание и

выполнение программы ошибок

Обращение trap(ВызываемыйПредикат,КодВыхода,ПредикатОшибки)

Домены (<predicate>,integer,<predicate>)

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

аргументов

Описание Стандартный предикат trap возвращает перехваченную

внешнюю ошибку и обрабатывает исключительную

ситуацию. В комбинации с exit вы можете использовать

его как разновидность механизма обработки ошибок

(longfail-blockexit-longjump mechanism).

Обычно, trap будет просто согласован, если

ВызываемыйПредикат будет согласован, или

несогласован, если он не согласуется. Однако, если

происходит исключительная (особая) ситуация во время

выполнения ВызываемыйПредикат, или во время

выполнения одной из его подцелей - КодВыхода, то

будет возвращаться соответствующее значение, и будет

вызван ПредикатОшибки. Когда ПредикатОшибки

выполнится, trap будет несогласован. Исключительные

ситуации и коды выхода следующие:

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

Ситуация Код выхода

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

включилась программа соответствующий номер

обработки ошибки ошибки

нажат Ctrl-Break 0

exit(N) номер N

exit 0

Если ВызываемыйПредикат является недетерминированным

это будет показано в вызове trap. Это значит, что

выполнение этой улавливаемой подцели полностью видно,

исключая случай, если подцель прекращает выполнение

при помощи exit.

Перед вызовом в trap ПредикатОшибки размеры стека,

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

старое значение, которое они имели перед тем, когда

был вызван trap. Это значит, что trap способен

остановить переполнение памяти.

Пример

domains

file=dd

predicates

nondeterm process(STRING)

error(INTEGER)

clauses

process("a").

process("b"):- writedevice(dd).

error(E):- writef("\n\n>> Код ошибки=%", E),beep.

goal

write("\n\nТЕСТ ЛОВЛИ ПРОГРАМНЫХ ОШИБОК"),

trap( process(A), E, error(E) ),

write("\nПроцес успешен: A=", A),

write("\nСейчас проверим второе предложение в

process"),

fail.

true

Назначение Предикат всегда будет согласован

Обращение true

Описание Стандартный предикат true согласовывается немедленно

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

trap, например, если вы не желаете описывать процесс

выполнения ошибки, то можете использовать :

trap(writedevace(ФайлКотМожетБытьЗакрыт),_,true)

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

завершение

Ошибки Нет ошибок.

Пример

Goal:true

Yes

Goal: not(true)

No

Goal: trap(exit,_,true)

No

unreadchar/1

Назначение Помещает символ в буфер клавиатуры

Обращение unreadchar(Символ)

Домены (char)

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

аргументов

Описание unreadchar будет помещать Символ в буфер клавиатуры,

даже если клавиатура не является текущим устройством

чтения. Длина буфера клавиатуры - 128 байт; если он

переполнен, будет вызвана программа ошибок.

Неудачное Если буфер клавиатуры будет полный (размер = 128

завершение символов).

Ошибки 1076 'unreadchar' несогласован из-за полного буфера

(максимум 128 символов).

Пример

Goal: unreadchar('I'),unreadchar('H')

Yes

Goal: HI

upper_lower/2

Назначение Выполняет преобразование между верхним и нижним

регистром символов клавиатуры

Обращение upper_lower(ВерхнРег,НижнРег)

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

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

аргументов

Описание upper_lower выполняет преобразование между верхним и

нижним регистром для двух строк или двух символов.

(вх,вых)

Связывает НижнРег с нижним регистром, эквивалентным

ВерхнРег.

(вых,вх)

Связывает ВерхнРег с верхним регистром, эквивалентным

НижнРег.

(вх,вх)

Этот вариант потока является отличным от двух других.

Предикат согласовывается, если две строки будут

эквивалентны - если они обе будут или все в верхнем

или все в нижнем регистре. В других случаях

upper_lower (вх,вх) выполняет сравнение слов без

учета регистров.

Неудачное Смотри описание.

завершение

Ошибки Нет ошибок.

Пример

Goal:upper_lower("ОН ТАМ",LOWER)

LOWER=он там

1 Solution

Goal: upper_lower(UPPER,"да")

UPPER=ДА

1 Solution

Goal: upper_lower("дА","Да")

Yes

Goal: upper_lower(UPPER,'y')

UPPER=Y

1 Solution

Goal: upper_lower('Y',LOWER)

LOWER=y

1 Solution

window_attr/1

Назначение Устанавливает атрибут активного окна

Обращение window_attr(Атрибут)

Домены (integer)

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

аргументов

Описание window_attr устанавливает для текущего окна значение

атрибута, которое связано с переменной Атрибут.

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

завершение

Ошибки Нет ошибок.

Пример

GOAL

makewindow(1,7,0,"",0,0,25,80),

window_attr(7),

write("\nСейчас атрибут - белые символы на

черном фоне"),

readchar(_),

window_attr(112),

write("\nСейчас атрибут - черные символы на

белом фоне"),

readchar(_).

window_str/1

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

окно

Обращение window_str(СтрокаЭкрана)

Домены (string)

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

аргументов

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

Связывает переменную СтрокаЭкрана со строкой,

размещенной в настоящий момент в активном окне;

поэтому СтрокаЭкрана имеет те же линни, какие имеются

в активном окне. Длина каждой линии определяется

последним непустым символом в линии.

(вх)

СтрокаЭкрана записывается в окно согласно следующим

критериям:

- Если линий в строке больше, чем линий в окне, то

window_str записывает линии, пока пространство окна

не будет заполнено.

- Если линий в строке меньше, чем линий в окне, то

window_str заполняет остальные линии в окне

пробелами.

- Если на линии строки больше символов, чем имеется в

распоряжении на линии окна, window_str обрезает

строку в соответствующую по размерам.

- Если символов на линии меньше, чем колонок в окне,

window_str заполняет остаток линии пробелами.

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

завершение

Ошибки Нет ошибок.

Пример

goal

makewindow(1,7,0,"",0,0,25,80),

makewindow(2,7,7,"",5,10,10,50),

file_str("prolog.err",STR1),

window_str(STR1),

readchar(_),

window_str(STR2),

removewindow,

window_str(STR2).

write

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

Обращение write(e1,e2,e3, .... ,eN)

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

аргументов

Описание write записывает данные константы или переменные в

текущее окно или на текущее устройство вывода. write

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

аргументов ei. Аргументы во write не могут быть

свободными переменными.

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

завершение

Ошибки 2001 Не могу выполнить операцию записи.

Пример

GOAL

write("\nВы",' ',"можете знать",

" этот предикат ").

writedevise/1

Назначение Устанавливает или дает текущее устройство вывода

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

Домены (symbol)

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

аргументов

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

Переназначает текущее устройство вывода в открытый

файл с данным СимвИмяФайла. Открытый файл может быть

одним из стандартных символических файлов или любым

пользовательским файлом, открытым для записи или для

модификации.

(вых)

Связывает СимвИмяФайла с текущим устройством вывода.

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

для вывода, являются:

com1 записывающий в последовательный порт связи

printer записывающий в параллельный порт принтера

screen записывающий в монитор экрана

stdout записывающий в стандартный выход ДОС

stderr записывающий в файл стандартных ошибок

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

завершение

Ошибки 1012 Попытка переназначить устройство ввода в файл,

который находится или в режиме записи или в

режиме модификации.

Пример

domains

FILE = myfile

goal

openwrite(myfile,"dd.txt"),

writedevice(myfile),

write("Файл с одной линией\n"),

writedevice(screen),

write("\nСейчас пишем в экран"),

writedevice(myfile),

closefile(myfile),

writedevice(DEV),

write("\nЗаметим устройство заниси автоматически

установлено в : ",DEV),

write("\nкогда файл закрыт").

writef/*

Назначение Выполняет форматированный вывод

Обращение writef(ФорматСтр,Арг1,Арг2,Арг3, ... )

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

аргументов

Описание writef выполняет форматированный вывод. Аргументы

Арг1 - АргN могут быть константами или переменными,

которые относятся к стандартным доменам. Формат

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

без модификации, и формат спецификаций формы %-m.pf.

Формат спецификаций означает:

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

спецификация что она означает

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

- (дефис) показывает, что поля выравниваются

слева; правое выравнивание действует по

умолчанию (необязательный параметр).

m поле десятичное число, описывающее

минимальный размер поля (необязательный

параметр).

.p поле описывает или точное представление

числа с плавающей точкой, или

максимальное количество напечатанных в

строке символов (необязательный

параметр).

f поле описывает другие форматы, которые

умалчиваются для данного объекта

(необязательный параметр).

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

Например; в f поле вы можете дать описание, которое

говорит, целое число будет сформатировано как целое

без знака, или что вещественное будет сформатировано

в экспоненциальной системе счисления, или что символ

будет сформатирован как шестнадцатиричное число.

writef(формат) воспринимает следующие форматы

описания в f поле:

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

описание в

f поле что оно означает

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

f Формат вещественного в фиксированной

десятичной системе счисления (такой,

как 123.4 или 0.004321).

e Формат вещественного в

экспоненциальной форме представления.

g Формат вещественного в коротком

формате (это используется по

умолчанию для вещественного.

d Формат символов или целых чисел как

десятичное число.

u Формат символов или целых чисел как

десятичное число без знака.

x Формат символов или целых чисел как

шестнадцатиричного числа.

с Формат символов или целых чисел как

символа.

R Использует аргумент как ссылку на

номер указателя базы данных (только

ref домен).

X Использует аргумент как длинное

шестнадцатиричное число (строки,

номер указателя базы данных).

s Формат как строка (символов и строк).

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

Неудачное Смотри write.

завершение

Ошибки 1025 Слишком много аргументов в формате строки.

Пример goal

makewindow(1,23,7,"",0,0,24,80),

writef("\nДемонстрация предиката writef\n"),

A = one,

B = 330.12,

C = 4.3333375,

D = "один два три",

writef("A = '%-7' \nB = '%8.1e'\n",A,B),

writef("A = '%' \nB = '%8.4e'\n",A,B),

writef("C = '%-7.7g' \nD = '%7.7'\n",C,D),

writef("C = '%-7.0f' \nD = '%0'\n",C,D),

writef("char: %c, decimal: %d, hex: %x,

unsigned: %u",97,'a',33,-1).