3. 5. Встроенные предикаты, предназначенные для управления файлами

В языке Пролог существуют понятия текущего входного потока (из которого предикаты ввода считывают символы) и текущего выходного потока (в который предикаты вывода записывают символы). По умолчанию считается, что оба этих потока связаны с пользовательским терминалом. Приводимые далее предикаты позволяют связывать каждый из этих потоков с файлами.

see (F) Здесь F - имя файла. Если существует файл с таким именем, допускающий чтение, то он открывается и связывается с текущим входным потоком. Любые вызовы предикатов ввода, скажем, предикатов "read", "getO" и т. д., будут приводить к считыванию символов из этого файла.

seeing (F) Этот предикат унифицирует "F" с именем файла, который в настоящее время соответствует текущему входному потоку. Если текущий входной поток ассоциируется с пользовательским терминалом, то F унифицируется с константой « user».

seen Если файл был связан с текущим входным потоком при помощи предиката "see/1", то предикат "seen" закрывает этот файл и опять связывает с текущим входным потоком пользовательский терминал.

Пример:

|? - see (' данные '), % открыть входной

%файл

read (R), % считать терм

write (R), % обработать терм

seen. % закрыть файл

tell (F) Здесь F - имя файла. Этот файл создается или открывается как выходной и связывается с текущим выходным потоком. Любые вызовы предикатов вывода, скажем, "write", "put" и т. д., будут приводить к записи символов в этот файл.

telling (F) Этот предикат конкретизирует F именем файла, который в настоящее время соответствует текущему выходному потоку. Если текущий выходной поток направлен на пользовательский терминал, то F конкретизируется значением «user».

told Если файл был связан с текущим выходным потоком при помощи предиката "tell/1", то предикат "told" закрывает этот файл и опять направляет текущий выходной поток на пользовательский терминал.

3. 6. Проверка типа терма

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

var (X) Предикат "var" даст значение истина, если его аргумент будет неконкретизированной переменной.

Пример:

|? -var (X).

да

|? - Х= Лондон, var (X).

нет

В следующем примере "true" — это встроенный предикат, который всегда дает истину. Он часто используется в конструкциях с "или" (символ;).

вывод_по_умолч (X): -

(var (X), Х = 'внимание: переменная'; true),

write (X), n1.

|?—вывод_по_умолч (привет).

привет

да

|? -вывод_по_умолч (Х).

внимание: переменная

да

nonvar (X) Предикат "nonvar" будет истинным, если его аргументом будет терм любого вида, кроме неконкретизированной переменной.

Пример:

|? - Х = [париж, лондон, нью_йорк, токио],

nonvar (X).

Да

integer (X) Предикат "integer" даст значение истина, если его аргументом будет целая константа или переменная, конкретизированная целым числом.

atom (X) Предикат "atom" будет истинным, если его аргументом служит нецелая константа, например:

|? - atom (17).

нет

|? -atom (отец (X)).

нет

|?—аtom (париж).

да

Соседние файлы в папке Гл.0,1,2,3,4,5,Предисловие