Команды операционной системы

 

Для выполнения команд system и dir необходимо, чтобы

Турбо-Прологу была доступна дискета с COMMAND. СОМ.

 

system(команда)

(string):(i)

 

Передает указанную команду операционной системе.

 

date(год.месяц,день)

(integer,integer,integer): (i,i, i)(0,0,0)

 

Устанавливает (i,i,i) или возврапрет (i,i,i) системную дату.

time( часы, минуты, секунды, сотые_секунды)

(integer,integer,integer,integer): (i,i,i,i)(0,0,0,0)

 

Устанавливает (i,i,i,i) или возвращает (0,0,0,0) системное

время.

 

mеmbyte(сегмент,смещение,байт)

(integer,integer,integer):(i,i,i) (i,i,о)

 

Пишет (i,i,i) или возвращает (i,i,о) байт, адрес памяти которого

равен сегмент * 16 + смещение (offset). Адреса в диапазоне

[32768,65536] рассматриваются как отрицательные целые числа.

 

menword(сегмент,смещение,слово)

(integer,integer,integer):(i,i,i) (i,i,o)

 

Пишет (i,i,i) или возвращает (i,i,o) слово, адрес памяти

которого равен сегмент * 16 + смещение. Адреса в диапазоне

[32768,65536] рассматриваются как отрицательные целые числа.

 

portbyte(номер_порта,байт)

(integer,integer): (i,i)(i,о)

 

Пишет (i,i) байт в указанный порт, или возвращает (i,о) байт от

него.

 

ptr_dvord( строка_переменная,сегмент,смещение)

(string,integer,integer):(i,о,о)(о,i,i)

 

Возвращает (i,o,o) внутренние адреса сегмента и смешения указанной

конкретизированной строкой_переменной, или возвращает (о,i,i)

строку (.чонец при байте NUL) указанных адресов.

 

diг(маршрут,спецификация_файла,имя_файла)

(string,string,string):(i,i,о)

 

Выдаются специфированные файлы из подкаталога (по маршруту).

Возможно выбрать один файл с помощью стрелок. При нажатии <ВК>

возвращается имя выбранного файла.

Например, файл выбрать, читать, редактировать и писать обратно:

 

goal

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

dir("a: ","*. *",F), /* выбрать файл */

file_str(F,S), /* читать его */

edit(S,N), /* редактировать */

file_str(F,N). /* писать обратно */

 

stогаgе(стек,хип,трейл) .

(real,real,real): (о,о,о)

 

Возвращает размеры стека, "кучи" (heap) и "хвоста" (trail).

 

blos(номер_прерывания,вх_регистр,вых_регистр)

(integer, regdom, regdom): (i, i, о)

 

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

в вх_регистр значениями регистров и возвращает значения

регистров после выполнения прерывания в вых_регистр. Вх_регистр

и вых_регистр относятся к сгенерированной внутри Турбо-Пролога

области определения regdom, которая определена как

regdom=reg(AX,ВХ,СХ,DX,SI,DI,DS,ES), где AX... ES типа lnteger.

 

Дополнительные предикаты для работы Турбо-пролога

 

bound(переменная)

 

Истинно, если переменная является конкретизированной.

 

free(переменная)

 

Истинно, если переменная является неконкретиаированной.

Например, предикат для сложения, который реализует конкретизации

(i,i,0), (i,0,i), (0,i,i) И (i,i,i):

 

predicates

plus( real, real, real)

clauses

plus(X,Y,Z):-

free(Z),bound(X),bound(Y),Z=X+Y,I. /* сложение */

plus(X,Y,Z):-

 

free(Y),bound(X),bound(Z),Y»Z-X,I. /* вычетание */

plus(X,Y,Z):-

 

free(X),bound(Y),bound(Z),X»Z-Y,l. /* вычетание */

plus(X,Y,Z):- .

bound(X),bound(Y),bound(Z),Z"X+Y. /* проверка */

 

После 'запуска можно указать внешние цели:

 

Goal: ответ (без количества решений)

plus(3,2,X) .X=5

plus(3,X,5) X=2

plus(X,2,5) X=3

plus(3,2,5) True

plus(3,2,6) False

 

isname(строка)

(string) :(i)

 

Истинно, если строка является именем встроенного предиката

Турбо-Пролога.

 

fail

Всегда ложно. Вызывает возврат.

 

Отсечение. Ограничивает возврат .

 

findall(переменная,предикат(...),список_решений)

 

В списке решений возвращается все решения для указанной

переменной в указанном предикате. Для списка решений должна быть

указана подходящая область определения.

Например, из множества адресов выбрать определенные:

 

domains

familija=string

gorod =string

spisok_rai'nllij-familija* /* / области определения для */

spisok_gorodov=gorod* /* ответных списков findall */

predicates

adres(familija,eorod)

clauses

adres("Иванов","Киев").

adres("Гринхофс","Рига").

adres("Шевченко","Киев").

adres("Иванов","Рига").

goal

findall(Gor,adres("Иванов",Gor).Spisok1),

nl,write(Spisokl), /* выводит ["Киев","Рига"] */

findall (Fam, adres( Fam, ) , Spisok2),

nl,wrlte(Splsok2).

 

/* выводит ["Иванов", "Гринхофс", "Шэвченко", "Иванов"] */

 

exit

 

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

управление меню Турбо-Пролога.

 

not(подцель)

Истинно, если подцель ложна.

 

trace .

 

Общее включение режима отладки. Указывается в начале исходной

программы.

 

trace(статус)

(symbol) :(i)(0)

 

Устанавливает (i) или возвращает (0) текущий режим отладки. В

начале исходной программы должен быть указан предикат trace. В

качестве статуса возможно указать on - для включение, off - для

выключения отладки. Этот предикат позволяет выборочно отладить

программу.

 

diagnostics

 

Комприлятор выдает анализ программы, в который входит:

-- имена использованных предикатов;

- являются ли дизъюнкты для определенного предиката фактами или

нет;

- является ли предикат детерминированным или нет;

- размер кода каждого предиката;

- конкретизированность предиката;

- области определения аргументов.

 

nowarnings

 

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

предупреждения.

 

project "имя_файла"

Указывает, что данная программа является частью проекта.

 

include "имя_файла"

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