in = file
GOAL: openread(in,"file.txt ").
Поскольку символ "\", обычно используемый для разделения имен каталогов, применяется в Турбо-Прологе для записи кодов символов, требуется использовать вместо одного обратного слэша два ("\\"). Например, чтобы указать путь "C:\Prolog\BIN", нужно записать строку "C:\\Prolog\\BIN".
Пример. Предложить замену для стандартного предиката openread.
Предикат, имеющий два аргумента, должен открывать существующий файл на чтение, в противном случае выводить сообщение о том, что файл с таким именем не найден. Первый аргумент - внутреннее символическое имя файла, второй — строка, представляющая внешнее дисковое имя файла. Новая модификация предиката должна быть корректной и завершаться успехом в любом случае, вне зависимости от того, наличествует открываемый файл или отсутствует.
openFile(F,N):– existfile(N),!, /* проверяем
существование файла с именем N */
openread(F,N). /* связать внешний файл с именем N\
с файловой переменной F и открыть на чтение */
openFile(_,N):– write("Файл с именем ",N," не найден!").
|
|
/* выдать сообщение, если предикат existfile не выполнился */
Аналогичным образом можно модифицировать предикаты openappend и openmodify. Предикат openwrite можно модифицировать таким образом, чтобы при попытке открыть существующий файл на запись предикат вначале выдавал бы предупреждение о том, что содержимое этого файла будет уничтожено.
Пример. Предикат, выводящий содержимое произвольного файла на экран.
Предикат будет иметь один параметр строкового типа, представляющий собой внешнее дисковое имя файла.
DOMAINS
file = f /* f — внутреннее имя файла */
PREDICATES
Write_file(file)
WriteFile(string)
GOAL
write("Введите имя файла: "),readln(F_N),
/* считать название файла в переменную F_N */
WriteFile(F_N).
CLAUSES
write_file(f):– not(eof(f)),!, /* если файл f еще не закончился */
readchar(C), /* читать символ из файла */
write(C," "), /* вывод символа на экран*/
write_file(f). /* продолжить процесс */