Партнерка на США и Канаду по недвижимости, выплаты в крипто

  • 30% recurring commission
  • Выплаты в USDT
  • Вывод каждую неделю
  • Комиссия до 5 лет за каждого referral


ВВОД И ВЫВОД

Как можно обмениваться информацией с файлами, а затем - вводить и выводить данные в разных форматах.

В прологе часто бывает ситуация, в которой программа взаимодействует с несколькими файлами. Она может, считывать данные из нескольких входных файлов, называемых также входными потоками, и выводить данные в несколько выходных файлов, называемых выходными потоками. В каждый момент выполнения пролог-программы лишь два файла являются "активными": один для ввода, другой - для вывода. Эти два файла называются текущим входным потоком и текущим выходным потоком соответственно.

Файлы могут обрабатываться только последовательно. Все файлы являются "текстовыми", т. е. файлами, состоящими из символов. Символы - это буквы, цифры и специальные знаки. О некоторых из них говорят, что они непечатаемые, поскольку, будучи выведенными на терминал, они не появляются на экране. Однако их присутствие может сказаться каким-либо другим образом, например, появятся пробелы или пустые строки.

Существуют два основных способа, с помощью которых файлы рассматриваются в Прологе в зависимости от формы записанной в них информации. Один способ - рассматривать символ как основной элемент файла. Соответственно один запрос на ввод или вывод приведет к чтению или записи одного символа. Для этой цели предназначены встроенные предикаты get, get0 и put (получить, получить0 и выдать) .

Другой способ рассматривать файл - считать, что в качестве основных элементов построения файла используются более крупные единицы текста. Такой естественной более крупной единицей является прологовский терм. Поэтому каждый запрос на ввод/вывод такого типа приведет к переносу целого терма из текущего входного потока или в текущий выходной поток соответственно. Предикатами для переноса термов являются предикаты read и write.

НЕ нашли? Не то? Что вы ищете?

Встроенный предикат read(Х) используется для чтения термов из текущего входного потока.

Встроенный предикат write(Х) выводит терм.

Ввод и вывод в прологе организуется с помощью специальных предикатов чтения и записи. Перечислим наиболее часто используемые их этих предикатов:

  readchar(Х) - считывает один символ с входного потока (по умолчанию, с клавиатуры) и присваивает его переменной Х;

  readint(Х) - считывает целое число  с  входного  потока  и присваивает его переменной Х;

  readln(Х) - считывает символы с входного потока  до  нажатия клавиши ввод.  Введенные  символы присваиваются  переменной  Х,  которая  должна  быть  строковой (string) или символьной (symbol);

  readreal(Х) - считывает вещественное число с входного  потока и присваивает его переменной Х;

  write(Arg1, Arg2,...) - выводит значения аргументов в заданное активное окно на текущее устройство (по умолчанию,  на  экран дисплея). Аргументы Arg1, Arg2,... могут быть константами или переменными, которым заранее присвоены требуемые  значения. 

  В предикате write можно использовать  символы,  начинающиеся со знака \. Они имеют специальные значения:

  \k - символ, имеющий ASCII-код числа k;

  \n - возврат каретки и перевод строки;

  \t - табуляция.

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

Пример. Вывести на экран номер телефона из списка.

predicates

  reference(symbol, symbol)

goal

  write("Ввведите имя :"),

  readln(Name),

  reference(Name, Phone),

  write("Номер телефона - ",Phone).

clauses

  reference("Андрей", "01-123456").

  reference("Лена",  "01-569767").

  reference("Саша",  "01-267400").

  reference("Витя","01-191051").

  В прологе файл может быть открыт: для чтения, записи, добавления и модификаций. Каждому открытому файлу ставится в соответствие логическое имя. Оно начинается со строчной буквы, должно быть объявлено в разделе domains и иметь тип file.

Четыре логических имени - printer, screen, keyboard и coml - зарезервированы и относятся соответственно к принтеру, экрану  дисплея, клавиатуре и первому коммуникационному каналу.

  Опишем часто используемые стандартные предикаты для работы с файлами:

  openread (логическое имя файла, физическое имя файла) – файл с заданным физическим именем открывается для чтения, и  ему  ставится в соответствие логическое имя; например: openread  (myfile, "prim. pro");

  openwrite (логическое имя файла, физическое имя файла) - подобен openread, но файл открывается для записи;

  openappend ( логическое имя файла, физическое имя  файла) - подобен openread, но файл открывается для дополнения;

  openmodify (логическое имя файла, физическое  имя  файла) - подобен openread, но файл открывается для модификаций (чтения  и записи);

  closefile (логическое имя файла) - файл с указанным логическим именем закрывается;

  readdevice (логическое имя файла) - перераспределяет  стандартный входной поток на файл с заданным логическим именем, который открывается для чтения;

  writedevice (логическое имя файла) - перераспределяет  стандартный входной поток на файл с заданным логическим именем, который открывается для записи или добавления;

  file_str (физическое имя файла, str) - считывает  данные  из файла с указанным физическим именем и помещает их в str ( переменная str должна быть символьной или строковой). Символом  конца файла является Ctrl-Z (ASCII-код26);

  filepos (логическое имя файла, позиция, режим) - устанавливает текущий указатель на заданную  позицию  в  указанном  файле.

Объект,  указывающий  позицию,  должен  быть  вещественного  типа (real), а режим - целого типа (integer). Если на месте режима записан 0 (нуль), позиция отсчитывается от начала файла; если 1, - от текущего значения указателя; если 2, - от  конца  файла.  Этот предикат используется для прямого доступа к файлу.

Рассмотрим пример:

Создать программу, которая ждет нажатия клавиши, а после нажатия записывает значение этого символа в файл 2.txt.

domains

file=f

predicates

vv

goal

vv.

clauses

wr:-write("vvedite symvol\n"),

  openwrite(f,"1.txt"), /*открыть файл для записи*/

  readchar(Simvol), /*считать символ*/

  write(Simvol),

  writedevice(f), /*открывается для записи или добавления*/

  write (Simvol,"\n"), /*запись в файл*/

  closefile(f). /*закрытие файла*/