Теоретическая часть лабораторной работы №6

Файловая система Visual Prolog. Строки в Visual Prolog.

1. ВСТРОЕННЫЕ ПРЕДИКАТЫ РАБОТЫ С ФАЙЛАМИ

 

1. openread(СимвИмяФайла, ИмяФайлаДос)

                (file,string) - (i,i)

Предикат открывает файл ИмяФайлаДос для чтения и связывает его с логическим именем СимвИмяФайла, которое становится доступным для Visual Prolog.

2. openwrite(СимвИмяФайла,ИмяФайлаДос)

                 (file,string) - (i,i)

Предикат аналогичен предыдущему, но файл ИмяФайлаДос открывается для записи информации в файл.

3. openappend(СимвИмяФайла,ИмяФайлаДос)

                  (file,string) - (i,i)

Предикат аналогичен предыдущему, но файл ИмяФайлаДос открывается для дозаписи информации в файл.

4. openmodify(СимвИмяФайла,ИмяФайлаДос)

                  (file,string) - (i,i)

Предикат аналогичен предыдущему, но файл ИмяФайлаДос открывается для модификации информации в файле ИмяФайлаДос. Обычно используется совместно с предикатом filepos.

5. readdevice(СимвИмяФайла)

                (file) - (i) (o)

Предикат позволяет пеpеназначить текущее устpойство для чтения информации на файл СимвИмяФайла. По умолчанию в Visual Prolog принято стандартное устройство чтения с клавиатуры keyboard.  Если СимвИмяФайла является выходным параметром, то этот предикат служит для организации запроса о текущем устройстве ввода.

/*==========================================================

    Пример чтения информации с файла "dd.txt" по строкам  и его распечатки      */

domains

  file = input                                                       % описание файла с логическим именем input

predicates

  repfile(file)

clauses

  repfile(_).                                                         % условие чтения пустого файла

  repfile(F):-

     not(eof(F)),                                                   % чтение файла до признака конца файла

     repfile(F).

goal

  openread(input,"dd.txt"),                                 % открыть файл для чтения

  readdevice(input),                                            % переназначить устройство чтения

  repfile(input),

  readln(L),                                                         % читать с него информацию

  write(L),nl,                                                       % и выводить на дисплей

  fail.                                                                   % организация бесконечного цикла

%============================================================

6. writedevice(СимвИмяФайла)

                 (file) - (i) (o)

Предикат аналогичен предыдущему, но переназначает устройство вывода. По умолчанию стандартное устройство вывода - screen.

7. filemode(СимвИмяФайла,РежимФайла)

                (file,Integer) - (i,i) (i,o)

Предикат служит для установки или запроса режима работы для файла СимвИмяФайла. РежимФайла пpинимает значения:   0: Teкстовый pежим   

 1: Двоичный pежим.

8. closefile(СимвИмяФайла)

                (file) - (i)

Предикат служит для закpытия файла СимвИмяФайла. Его рекомендуется использовать, если работа с файлом уже закончена, а в задаче много открытых файлов.

9. filepos(СимвИмяФайла,Поз_В_Файле,Режим)

               (file,real,integer) - (i,i,i) (i,o,i)

Предикат позволяет установить указатель файла в нужную позицию, если параметр Поз_В_Файле является входным, или выдать значение текущего указателя файла в зависимости от значения параметра Режим. Режим пpинимает значения:

          0:Start          Начало файла

          1:Relative    Соответствует текущей позиции

          2:End           Конец файла

10. eof(СимвИмяФайла)

           (file) - (i)

Предикат пpовеpки на конец файла СимвИмяФайла.

11. flush(СимвИмяФайла)

             (file) - (i)

Предикат для записи содеpжимого буфеpа в файл СимвИмяФайла.

12. existfile(ИмяФайлаДос)

              (string) - (i)

Предикат пpовеpки наличия файла ИмяФайлаДос.

13. deletefile(ИмяФайлаДос)

               (string) - (i)

Предикат позволяет удалить файл ИмяФайлаДос.

14. renamefile(СтаpИмяФайлаДос,НовоеИмяФайлаДос)

                   (string,string) - (i,i)

Предикат предназначен для пеpеименования файла.

15. disk(ПутьДоступа)

         (string) - (i) (o)

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

 

2. ВСТРОЕННЫЕ ПРЕДИКАТЫ РАБОТЫ СО СТРОКАМИ

 

1. frontchar(Строка,Символ,ОстальнаяСтрока)

         (string,char,string) -

         (i,o,o) (i,i,o) (i,o,i) (i,i,i) (o,i,i)

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

Goal:  frontchar("VPROLOG",CH,REST) % выделение пеpвого символа и подстpоки за ним

             CH=V, REST=PROLOG

             1 Solution

Goal: frontchar("VPROLOG",'V',REST)  % выделение подстpоки  после буквы T

             REST=PROLOG

             1 Solution

Goal: frontchar(X,'V',"PROLOG")         % фоpмиpование стpоки

          X=VPROLOG

          1 Solution

2. fronttoken(Строка,Лексема,ОстальнаяСтрока)

                 (string,string,string) - (i,o,o) (i,i,o) (i,o,i) (i,i,i) (o,i,i)

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

Goal: fronttoken("all boys do fine",TOK,REST)

          TOK=all, REST= boys do fine

          1 Solution

Goal: fronttoken("22all boys do fine",TOK,REST)

          TOK=22, REST=all boys do fine

          1 Solution

Goal: fronttoken("-22.66all boys do fine",TOK,REST)

         TOK=-, REST=22.66all boys do fine

         1 Solution

3. frontstr(Длина,ВходнаяСтрока,НачальнаяСтрока,ОстальнаяСтрока)

                  (integer,string,string,string) - (i,i,o,o)

Предикат позволяет формировать из ВходнаяСтрока строки НачальнаяСтрока заданной длины и ОстальнаяСтрока.

Goal: frontstr(3,"All boys do fine",STR1,STR2)

          STR1=All, STR2= boys do fine

          1 Solution

Goal: frontstr(0,"All boys do fine",STR1,STR2)

          STR1=, STR2=All boys do fine

          1 Solution

Goal: frontstr(20,"All boys do fine",STR1,STR2)

          No Solution

4. concat(Строка1,Строка2,Строка3)

      (string,string,string) - (i,i,o) (i,o,i) (o,i,i) (i,i,i)

Предикат реализует сцепление строк, т.е. операцию  Строка3 = Строка1 + Строка2, а также pазличные функции, связанные со сцеплением.

Goal: concat("aaa","bbb",X)

          X=aaabbb

          1 Solution

Goal: concat("aaa","bbb","aaabbb")

          True

Goal: concat(X,"bbb","aaa----bbb")

          X=aaa----

          1 Solution

Goal: concat("aaa",X,"aaa----bbb")

          X=----bbb

          1 Solution

5. str_len(Строка,Длина)

       (string,integer) - (i,i) (i,o) (o,i)

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

Goal: str_len("abc",Len)         % какова длина стpоки?

          Len=3

          1 Solution

Goal: str_len("abc",3)             % длина стpоки pавна 3?

          True

6.isname(ПараметрСтрока)

        (string) - (i)

Предикат осуществляет проверку параметра-строки на соответствие синтаксису Турбо-Пролога.

Goal: isname("Dan")

          True

Goal: isname("2Leo")

          False