Для выполнения команд 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 "имя_файла"
В компиляцию включается файл с указанным именем.