Доказательство предиката завершается успехом, если считываемый терм отождествляется с X, и неудачей в противном случае. При успешном доказательстве переменная Y становится списком, состоящим из имен переменных, входящих в терм X. Пролог переименовывает переменные, встретившиеся в вводимом терме. Таким образом, когда попытка доказать целевое утверждение read(X,Y) заканчивается успехом, список Y содержит внутренние имена переменных, входящих в терм X. Как и при использовании предиката read(X), после вводимого терма должна стоять точка.
Readb(X,Y)
Предикат аналогичен предикату read(X,Y). Различие состоит в том, что пользователь не должен печатать точку после ввода терма.
Примеры:
После запроса:
?-read(X).
система ожидает ввода. Если пользователь напечатает:
test (5).
то в результате переменная X получит значение
Х- test (5)
Задав вопрос
?- read (джек (мужчина)).
и введя терм
test.
получим ответ:
нет.
При запросе:
?-read(X,Y).
вводим терм
fred(P,a(Q)).
в результате получаем
X = fred(_55,a(_57))
Y=[[P |_55],[Q | _57]]
|
|
где _55 - внутреннее имя переменной Р, а _57 - внутреннее имя переменной Q.
Запись термов
Рассмотрим предикаты, служащие для записи термов.
Write(X)
Данный предикат выводит терм на экран. Если X содержит конкретизированные переменные, то на экране отображаются термы, которыми эти переменные конкретизированы. Если X содержит неконкретизированные переменные, они выводятся как уникальные целочисленные переменные. Сцепленные переменные, входящие в X, отображаются в виде одного и того же целого значения. Например, в ответ на запрос
?- write(cyммa(N,S,N+l)).
на экране появится
сумма (_35,_36 is_35+l).
Writeq(X)
Предикат аналогичен предикату write(X) кроме случая, когда X содержит атом или функторы, которые в программе следует заключать в кавычки. Предикат writeq записывает такие величины на экране в кавычках. Например, в результате запроса
?- writeq('fred.txt').
на экране появится
'fred.txt'
Display (X)
Предикат выводит терм X в стандартной скобочной префиксной
форме записи. Например, запрос
?- display (X+Y).
вызовет появление на экране записи:
+ (X,Y)