Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Пример:

Программа CH16EX01.PRO представляет утилиту копирования файлов с

оконным интерфейсом. Пользователю, использующему утилиту, нет необходи-

мости запоминать, имя какого файла (исходного или целевого) должно стоять

в команде COPY первым.

/* Program CH16EX01.PRO - File copy utility for novices */

goal

makewindow(1, 7, 7, "Source", 0, 0, 20, 35),

write ("Which file do you want to copy ?"),

cursor(3, 8), readln(X),

makewindow(2, 7, 7, "Destination", 0, 40, 20, 35),

write("What is the name of the new copy ?"),

cursor(3, 8), readin(Y),

concat(X, " ", X1), concat(X1, Y, Z),

concat("copy ", Z, W), /* Creates the string W*/

makewindow(3, 7, 7, "Process", 14, 15, 8, 50),

write("Copying",X, "to", Y), cursor(2, 3),

system(W). /*Invokes ДОС with the string W*/

Envsymbol/2

Предикат envsymbol выполняет поиск переменных среды ДОС в таблице,

при этом команда ДОС set устанавливает эти переменные.

Он имеет вид:

envsymbol (ДОС_evn_symbol, Value)

Например, команда ДОС:

set BGIDIR=c:\tprolog2\bgi

присваивает переменной BGDIR строку c:\tprolog2\bgi и цель, заданная Тур-

бо Прологу:

/*...*/

envsymbol ("BGIDIR", SetValue),

initgraph(0, 0, _, _, SetValue),

/*...*/

выполняет поиск в таблице переменных среды командной строки ДОС, соответ-

ствующей переменной BGIDIR и связывает SetValue с c: \tprolog2\bgi.

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

Date/3 и time/4

Турбо Пролог имеет два часто используемых стандартных предиката свя-

зи с ДОС: date и time. Каждый может быть использован двумя способами, в

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

предиката.

Если все переменные связаны, то предикат time переопределяет систем-

ные часы на новое значение времени. Если переменные свободны, то система

связывает их со значениями, полученными от системных часов.

time (Hours, Minutes, Seconds, Hundredths)

/*(i,i,i,i), (o,o,o,o)*/

date обрабатывается аналогично и имеет вид:

date(Year, Month, Day) /*(i,i,i), (o,o,o)*/

Пример.

Программа CH16EX02.PRO использует time для сообщения времени, затра-

ченного на листание каталога. (Имя каталога можно задать в теле програм-

мы).

/* Program CH16EX02.PRO -- Отображение затраченного времени */

predicates

timer

clauses

timer:-

time(H1,M1,S1,D1),nl,

write(*Start time is:",H1,":",M1,":",

S1,"and",D1,"/100 sec"),nl,

/*This is the activity that is being timed*/

system ("dir *.*"),

tame(H2,M2,S2,D2),

Time = (D2-D1)+100*((S2-S1)+60*(M2-M1))),

write("Elapsed time: ",Time,"/100 sec"),nl,

tame(H3,M3,S3,D3),

wrate("The time now is: ",H3,":",M3,":",

S3," and ",D3,"/100 sec").

goal

makewindow(1,7,7,"Timer",8,10,12,60),

write("Press any key to start"),

readchar(_),

timer.

Более сложным примером использования предиката time является прог-

рамма CH18EX10.PRO в главе 18.

Соседние файлы в папке Документация