Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Prolog.doc
Скачиваний:
32
Добавлен:
12.03.2015
Размер:
929.28 Кб
Скачать

Запись термов

Рассмотрим предикаты, служащие для записи термов.

write(X)

Данный предикат выводит терм на экран. Если Х содержит конк­ретизированные переменные, то на экране отображаются термы, ко­торыми эти переменные конкретизированы. Если Х содержит неконкретизированные переменные, они выводятся как уникальные цело­численные переменные. Сцепленные переменные, входящие в X, отображаются в виде одного и того же целого значения. Например, в ответ на запрос

?- write(сумма(N,S,N+1)).

на экране появится

сумма(_35,_36 is_35+l).

writeq(X)

Предикат аналогичен предикату write(X) кроме случая, когда Х содержит атом или функторы, которые в программе следует заклю­чать в кавычки. Предикат writeq записывает такие величины на эк­ране в кавычках. Например, в результате запроса

?- writeq('fred.txt').

на экране появится

'fred.txt'

display(X)

Предикат выводит терм Х в стандартной скобочной префиксной форме записи. Например, запрос

?- display (X+Y).

вызовет появление на экране записи:

+(X,Y).

9.4. Обработка файлов

Описанные выше предикаты ввода/вывода осуществляют считы­вание и запись на терминал. Клавиатура связывается со стандарт­ным входным потоком, а экран - со стандартным выходным потоком. Входной и выходной потоки могут осуществлять связь с различными файлами пользователя, требующимися во время сеанса работы с Пролог-системой. Для этого файл объявляется в качестве стандарт­ного входного потока, и рассмотренные выше предикаты для ввода производят считывание из файла, а не с клавиатуры. Подобным об­разом файл назначается в качестве стандартного выходного потока. В таком случае приведенные предикаты для вывода осуществляют запись в файл, а не на экран.

Для переопределения стандартных потоков используются следу­ющие предикаты.

see(F)

Определяет в качестве стандартного входного потока файл F.

seen(F)

Предикат переопределяет стандартный входной поток с файла F на клавиатуру. Прежде чем с помощью предиката see(F2) опреде­лить в качестве стандартного входного потока файл F2, следует с по­мощью предиката seen(F1) отменить связь файла F1 со стандартным входным потоком.

tell(F)

Целевое утверждение определяет стандартным выходным пото­ком файл F.

told(F)

Целевое утверждение переопределяет стандартный выходной по­ток с файла F на экран. Перед тем как с помощью предиката tell(F2) определить в качестве выходного потока новый файл F2, необходимо с помощью предиката told(Fl) переключить текущий выходной по­ток с файла F1.

Помимо перечисленных в Прологе есть два предиката, позволяю­щие выяснить, с какими файлами связаны стандартные потоки.

seeing(F)

F отождествляется с именем файла, связанного со стандартным входным потоком.

telling(F)

F отождествляется с именем файла, связанного со стандартным выходным потоком.

Если при выполнении описанных выше предикатов оказывается, что файл F не существует или переменная F не конкретизирована, возникает ошибка.

Кроме стандартных входного и выходного потоков, в большинст­ве реализаций Пролога используются и другие потоки, служащие для связи с файлами.

open(F,S,A)

Предикат открывает файл F в поток S. Если значением А являет­ся read, файл открывается для чтения, а если А принимает значение write, то файл открывается для записи.

close(S)

Предикат закрывает поток S.

При выполнении рассматриваемых целевых утверждений долж­ны быть конкретизированы переменные: S - имя потока, F - имя файла, А - режим доступа.

Если поток S открыт, мы должны использовать все имеющиеся предикаты ввода и вывода, указывая имя потока в качестве первого аргумента. Например, в результате выполнения последовательности утверждений

?- open (тестфайл,элемент,write),

write (элемент,тестпоток),

n1 (элемент), close (элемент).

в файл тестфайл будут выведены запись 'тестпоток' и признак новой строки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]