Основы современных компьютерных технологий

         

Стандартные предикаты


Стандартные (встроенные в систему) предикаты выполняют разнообразные функции по выполнению ввода-вывода переменных различных типов, работе с файлами, выполнению функций DOS, обработке строк, поддержке графического режима, обеспечение интерфейса с другими системами программирования (С, Паскаль) и т.д. Всего в системе содержится более 200 стандартных предикатов.

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

предикат(список аргументов) (типы доменов):(шаблон)

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

makewindow(HoмOкнa, АтрЭкр, АтрРамки, СтрРамки, Строка, Столбец, Высота, Ширина,ЧиститьОкно, ПозСтрРамки, ЗнакиГраницы)

(integer, integer, integer, string, integer, integer, integer, integer, integer, integer, string): (вх, вх, вх, вх, вх, вх, вх, вх, вх, вх, вх),(вых, вых, вых, вых, вых, вых, вых,вых, вых, вых, вых)

Создает окно с номером аргумент НомОкна. Остальные аргументы предиката имеют следующий смысл:

АтрЭкр определяет цвет символа и фона.

АтрРамки - при отличном от нуля значении рисуется граница - линия обрамления окна.

СтрРамки указывает строку, помещаемую в центре верхней границы контура окна.

Строка, Столбец - вертикальная и горизонтальная координаты верхнего левого угла окна.

Высота, Ширина - высота (число строк) и ширина (число колонок) окна.

325

ЧиститьОкно определяет, будет ли чиститься окно после его создания: О = Не чистить окно; 1 = Чистить окно.

ПозСтрРамки определяет место размещения заголовка окна (внутри верхней линии рамки окна): -1 = Заголовок в центре; N = Размещает заголовок с указанной позиции. ЗнакиГраницы описывают, как рисовать рамку окна; этот аргумент состоит строго из шести символов, обозначающих: верхний левый угол, верхний правый угол, нижний левый угол, нижний правый угол, горизонтальную линию и вертикальную линию соответственно.


Например: "\218| 191\192\217\196\179" - граница из одной линии; "\201\187\200\188\205\186" -граница из двух линий; "++++ -" -другой вариант описания границы.

readchar(СимволПеременной)(char):(вых)

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

readdevice(СимвИмяФайла) (symbol):(вx), (вых)

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

(вх): назначает текущее устройство ввода на открытый файл с данным Символич-ИмяФайла. Открываемый файл может быть один из стандартных файлов или любой файл пользователя с символическим именем, открытый для чтения или модификации, (вых): связывает СимвИмяФайла с именем текущего устройства ввода. Стандартные файлы, которые могут быть открыты для ввода: com"! - чтение из последовательного порта связи; keyboard - чтение с клавиатуры (по умолчанию); stdin - чтение из стандартного ввода DOS.

readint(ПеременнаяЦел)(integer):(вых)

Читает целое число с текущего устройства ввода. Преобразование символов не осуществляется, пока readint не встретит символ возврата каретки (ASCI! 13).

readln(ПеременнаяСтр)(string):(вых)

Считывает строку символов с текущего устройства ввода до символа символ возврата каретки (ASCII 13). Самая большая строка, которая может быть прочитана на экране, содержит 147 символов.

readreal(ПеременнаяВещ)(геаl):(вых)

Читает вещественное число с текущего устройства ввода, пока не прочитает символ возврата каретки. Если нажат Esc (ключ), readreal немедленно не согласуется. Readreal также не согласуется, если символы не образуют правильное вещественное число или они определяют вещественное число, превышающее допустимые границы.

write(e1,e2,e3....eN):(Bx,Bx,BX...Bx)

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



326

writedevice(СимвИмяФайла)(symbol):(вх),(выx)

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

(вх): переназначает текущее устройство вывода в открытый файл с данным СимвИмя-Файлэ. Открытый файл может быть одним из стандартных символических файлов или любым пользовательским файлом, открытым для записи или для модификации, (вых): связывает СимвИмяФайла с текущим устройством вывода. Для вывода могут использоваться следующие встроенные файлы: соm1 - последовательный порт; printer - параллельный порт принтера; screen - экран монитора; stdout - стандартный вывод DOS; stderr - файл стандартных ошибок.

removewindow/0

Удаляет текущее окно и переходит к предшествующему окну.

writef(ФорматСтр,Apг1,Apг2,Apг3... ):(вх,вх....вх)

Выполняет форматированный вывод. Аргументы Арг1 - ApгN могут быть константами или переменными. Форматы задаются в виде строки ФорматСтр обычного текста, где символы % отмечают положение аргументов строки. Допустимые спецификации формата содержат обычные символы, которые печатаются без модификации, и формат спецификаций формы %-m.pf. Формат спецификаций означает: - (дефис) показывает, что поля выравниваются слева; m поле - десятичное число, описывающее минимальный размер поля; .р поле описывает или точное представление числа с плавающей точкой, или максимальное количество напечатанных в строке символов.

f поле описывает следующие форматы:

f - формат вещественного в фиксированной десятичной системе счисления (такой, как 123.4 или 0.004321);

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

g - формат вещественного в коротком формате (используется по умолчанию);

d - формат символов или целых десятичных чисел;

u - формат символов или целых чисел как десятичное число без знака;

х - формат символов или целых чисел как шестнадцатеричного числа;

с - формат символов или целых чисел как символа;

R - использует аргумент как ссылку на номер указателя базы данных (только ref домен);

X - использует аргумент как длинное шестнадцатеричное число (строки, номер указателя базы данных);



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

asserta()(dbasedom):(вx)

Заносит факт (утверждение) в начало резидентной базы данных (домен, обозначенный как dbasedom, автоматически объявляется для каждого предиката из раздела database).

assertz(X)(dbasedom):(вx)

Заносит факт (утверждение) X в конец резидентной базы данных.

327

retract(X):(Bx)

В базе данных осуществляется поиск утверждения, голова и тело которого сопоставляются с термом X. Первое такое утверждение удаляется из базы данных. Аргумент (терм X) должен быть конкретизирован составным термом.

retractall(X):(Bx)

Удаляет из базы данных все утверждения, функтор и арность которых сопоставимы с Х.

frontchar(Стр, ПерСимв,OcтCтp)(string,char,string):

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

(вх,вых,вых): присваивает первый символ строки Стр переменной ПерСимв, а остаток строки - переменной ОстСтр. Возможны и другие комбинации входных и выходных аргументов.

frontstr(ЧислСимв,Стр1,НачСтр,Стр2)(integer,string,string,string):(вх, вх, вх, вых)

Присваивает первые ЧислСимв символов строки Стр 1 переменной НачСтр, а остаток строки - переменной Стр2.

fronttoken(Cтp,3нaк,OcтCтp)(string, string, string):

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

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

cursor(Cтp,Kол)(integer,integer):(вх,вх),(вых, вых)

(вх,вх): помещает курсор в позицию с координатами (Стр,Кол).

328

325 :: 326 :: 327 :: 328 :: Содержание


Содержание раздела