Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пролог =).doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
1.69 Mб
Скачать

6.3 Чтение и запись информации с файлов.

При вводе и выводе информации в прологе используется понятие потоков. Файлы для чтения - это входные потоки. Файлы для записи - это выходные потоки.

Для пользователя определены два потока:

информация вводимая с клавиатуры - входной поток.

информация выводимая на монитор - выходной поток.

Эти потоки являются псевдофайлами с именем user.

В каждый момент времени для пролога активны два файла:

для ввода - текущий входной поток.

для вывода - текущий выходной поток.

По умолчанию эти потоки - пользовательский терминал user.

6.3.1 Обработка входных потоков.

Входные потоки пролог "видит".

Поэтому определены следующие предикаты:

  • see(F) - открывает файл F, например 'a.dat' и он становится текущим входным потоком.

  • seeing(F) - связывает F с именем файла, являющегося текущим входным потоком.

  • seen - закрывает текущий входной поток и связывает его с user.

Примеры:

 

p1:-see('a.dat'),read(X),write(X),seen.

p2:-see('a.dat'),seeing(F),write(F),seen, read(A),write(A).

6.3.2 Обработка выходных потоков.

В выходные потоки пролог "говорит".

  • tell(F) - открывает файл F как текущий выходной поток. Если файла нет, то создает его.

  • telling(F)- связывает F с именем файла, являющегося текущим выходным потоком.

  • told - закрывает файл, являющиийся текущим выходным потоком. Текущим выходным потоком становится user.

Пример:

p3:- tell('a.dat'),write(a),told,write(a).

6.4 Обработка символов.

Пролог имеет несколько предикатов для обработки символов:

  • put(X)

  • get(X)

  • get0(X)

6.4.1 put(X)

Символы записываются в текущий выходной поток при помощи предиката put(C), где C - символ, который нужно вывести, представленный в кодировке ASCII ( число от 0 до 127). Пример:

p4:-put(65),put(66),put(67).

?-p4. ABC

6.4.2 get(X)

Печатный символ (код по ASCII больше 31) читается предикатом get(X). Аргумент X принимает числовое значение. Непечатный символ игнорируется.

6.4.3 get0(X)

Читает любой (печатный или нет) символ.

7.1 Встроенные предикаты

7.1.1 repeat.

Repeat - цель, которая всегда успешна. Ее особое свойство состоит в том, что она всегда находит альтернативу. Поэтому всякий раз, когда до нее доходит перебор, она порождает новую ветвь вычислений. Хотя repeat встроенный предикат, он может быть определен следующим образом:

repeat. repeat:- repeat.

Применение repeat можно посмотреть на примере процедуры sq,которая читает последовательность чисел и выдает их квадраты. Последовательность чисел заканчивается атомом stop.

sq:-repeat,read(X),( X=stop,!;

Y is X*X, write(Y), fail).