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

Предикат inkey/1

Предикат inkey читает символ с клавиатуры и имеет такой формат:

inkey(Char) /* ( o ) */

Если, когда вызывается inkey, клавиша нажата (или содержится в буфе-

ре клавиатуры), inkey возвратит аргумент, которому присвоено значение

клавиши. Если ни одна клавиша не нажата, inkey немедленно потерпит неуда-

чу.

Предикат keypressed/0

Предикат keypressed проверяет была ли нажата клавиша на клавиатуре;

имеет такой формат:

keypressed

Предикат keypressed завершается успешно, если клавиша нажата или

присутствует в буфере клавиатуры. Клавиша из буфера не удаляется.

Предикат unreadchar/1

unreadchar помещает символы во внутрений буфер клавиатуры и имеет

формат:

unreadchar(Char) /* ( i ) */

Размер этого буфера рваен 128 байтам. Если он переполняется,

unreadchar возвратит сообщение об ошибке.

Примеры

Эти примеры демонстрируют, как вы можете использовать стандартные

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

списками.

1. Программа CH12EX07.PRO показывает, как использовать readln и изв-

лекать сложные структуры данных из входных строк.

/* Program CH12EX07.PRO - Использование readln */

domains

person = p(name,age,teno,job)

age = integer

telno,name,job = string

predicates

readperson (person)

run

goal

run.

clauses

readperson(p(Name,Age,Teno,Job)) :-

write ("Which name ?"),readln(Name),

write ("Job ?"),readln(Job),

write ("Age ?"),readln(Age),

write ("Telephone no?"),readln(Telno).

run :-

readperson (P),nl,write(P),nl,nl,

write("Is this compound object OK (y/n)"),

readchar (Ch),Ch='y'.

run :-

nl,nl,write("Alright,try again"),nl,nl,run.

2. В данном примере показано использование предиката readint для

чтения целых чисел и преобразования их в список. Он читает одно це-

лое число на строке, пока вы не введете не целое (клавишу X). После

этого readint потерпит неудачу, и Турбо Пролог выведет список на эк-

ран.

/* Program CH12EX08.PRO - Использование readint */

domains

list = integer*

predicates

readlist (list)

goal

makewindow (1, 7, 7,"Integer List", 5, 5, 15, 70),

write("Type in a column of integers,liket this:",

"\n\n integer (pres ENTER)\n integer (pres

ENTER)\n",

"etc.\n\n Type X (pres ENTER) to end the

list.\n\n"),

readlist(TheList ),

write("\nThe list is:",TheList).

clauses

readlist([H|T]) :-

write("\16"), /* Печать символа-приглашения */

readint(H), !,

readlist(T).

readlist([]).

Загрузите программу CH12EX08.PRO, затем нажмите Alt -R для запуска.

После подсказки введите целые числа (например, 1234 Enter 567 Enter

89 Enter 0 Enter), затем нажмите X Enter для окончания ввода.

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