Интеллектуальные информационные системы
Теоретическая часть лабораторной работы №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
Социальные сети