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

Пример.

1) Программа CH14EX01.PR0 посылает сообщение в соответствующее окно

(сначала в окно 1, затем в окно 2); первый вызов readint отображает вво-

димые числа в окне 2.

После нажатия клавиши ВВОД вызов предиката removewindow удаляет

окно 2.

После этого предикат readint отображает вводимые числа в окне 1, до

тех пор, пока не будет нажата клавиша ВВОД. Затем окно 1 (ставшее текущим

активным окном) тоже исчезает.

Последний readint отобразит числа в нижней части экрана.

/* Program CH14EX01.PRO */

predicates

run

goalclauses

repeat,

makewindow(1, 20, 7, "A blue window", 2, 5, 10, 50),

write("The characters are red"), nl,

makewindow(2, 176, 7, "A light cyan window",14,25,10,40),

write("This window is light cyan and the "),

write("letters are black and blink."), nl,

write("Please type an integer to exit."), nl,

readint(_),

removewindow,

write("Please type an integer to exit."), nl,

readint(_),

removewindow.

Допустимо перекрытие окон, чтобы убедится в этом, замените команды

мakewindow в программе CH14EX01.PRO на

мakewindow(1, 20, 7, "First",1, 3, 20, 30)

и

мakewindow(2, 184, 7, "Second", 6, 18, 18, 50)

соответственно.

Если текст слишком велик и не помещается в окне, то он начнет "прок-

ручиваться", как и при использовании всего экрана. Чтобы убедиться в

этом, замените команды мakewindow в программе CH14EX01.PRO на

мakewindow(1, 20, 7, "First",1, 3, 10, 15)

и

мakewindow(2, 184, 7, "Second", 6, 18, 3, 30)

2) Программа CH14EX02.PRO использует окна, превращая ваш компьютер в

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

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

Отметим переопределение окна 2 в программе. Новое окно определяется

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

последним.

Для запуска программы задайте цель start.

/* Program CH14EX02.PRO */

predicates

start

run(integer)

do_sums

set_up_windows

clear_windows

clauses

start :- set_up_windows, do_sums.

set_up_windows :-

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

makewindow(1, 7, 7, "Left operand", 2, 5, 5, 25),

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

nl, write(" PLUS"),

makewindow(2, 7, 7, "Right operand", 2, 50, 5, 25),

makewindow(3, 7, 7, "Gives", 10, 27, 5, 25),

makewindow(4, 7, 7, "", 17, 22, 5, 35).

do_sums :- run(_), clear_windows, do_sums.

run(Z) :-

shiftwindow(1),

cursor(2, 1), readint(X),

shiftwindow(2),

cursor(2, 10), readint(Y),

shiftwindow(3), Z=X+Y, cursor(2, 10), write(Z),

shiftwindow(4),

write(" Please press the space bar"),

readchar(_).

clear_windows :-

shiftwindow(1), clearwindow,

shiftwindow(2), clearwindow,

shiftwindow(3), clearwindow,

shiftwindow(4), clearwindow.