- •27.Управление программой. Внутренние подпрограммы унификации Пролога.
- •28.Структура программ на Прологе. Предикаты и утверждения.
- •29.Арифметика в Прологе.
- •30.Программирование повторяющихся операций. Повторение и откат.
- •31.Методы повторения. Методы организации рекурсии.
- •32.Списки в Прологе. Применение списков в программе.
- •33.Использование метода с разделением списка на голову и хвост. Компоновка данных в список.
- •34.Присваивание переменным строковых значений. Конкатенация строк. Преобразование данных.
- •35.Создание символьных префиксов. Преобразование строк в список символов.
- •36.Специальные строки Пролога.
- •37.Формирование атомов из строк.
- •38.Преобразование строк в списки атомов с функторами.
- •39.Предикаты Пролога для работы с файлами. Использование предикатов для работы с файлами.
35.Создание символьных префиксов. Преобразование строк в список символов.
Предикат frontchar полезен при преобразовании строки в список символов. Пусть, например, необходимо преобразовать строку STARS в список ['S','T','A','R','S']. Метод этого преобразования, заключается в циклическом использовании предиката
frontchar для "вырезания" первого символа и размещения его в списке. Правило, которое выполняет эту процедуру, следующее:
convert("", []).
convert(Str, [Head|Tail]) :-
frontchar(Str, Head, Str1),
convert(Str1, Tail).
В правиле convert первым параметром является строка, а вторым параметром - список. Предикат frontchar рекурсивно извлекает первый символ из Str и помещает его в список.
Создать "префиксный" символ - это значит присоединить этот символ к началу строки. Например, присоединение префикса 'A' к "BCDEF" дает строку "ABCDEF". Эта операция в Турбо-Прологе реализуется с помощью встроенного предиката frontchar:
frontchar(String,Char,Rest_of_string).
Объекту String присваивается значение, состоящее из Char и Rest_of_string (остаток строки).
Предикат frontchar аналогичен предикату concat, за исключением того, что он присоединяет значение типа char к началу строки. Как и предикаты, выполняющие преобразование типов, предикат frontchar имеет несколько направлений обработки данных.
36.Специальные строки Пролога.
В Турбо-Прологе определены специальные строки, используемые для определенных целей. Эти строки называются именами. Имена используются для обозначения символических констант, доменов, предикатов и переменных. По определению специальные строки Турбо-Пролога имеют следующие пять свойств:
1. Строка строится из прописных и строчных букв, цифр и символов подчеркивания.
2. Между символами не должно быть пробелов.
3. Строка начинается с буквы.
4. Строка не может начинаться любым из специальных символов
5. Строка не может содержать управляющих символов.
Турбо-Пролог имеет встроенные предикаты, позволяющие проверять является ли строка специальной строкой Турбо-Пролога. Синтаксис этого предиката следующий:
isname(String).
Если String это строка Турбо-Пролога, то предикат будет успешным; в противном случае он будет неуспешным.
Предикат isname весьма удобен при программировании на Турбо-Прологе операций преобразования исходного текстового файла на одном языке в исходный текстовый файл на другом языке. Если команда введена, то isname может определить будет ли она преобразована в формат Турбо-Пролога в соответствии с определением
имени, принятом в языке. Другое использование isname это обработка введенных с клавиатуры данных и генерация исходных (текстовых) файлов, которые могут быть скомпилированы Турбо-Прологом.
37.Формирование атомов из строк.
Атом (token) это последовательность символов. Такая группа символов является специальной строкой Турбо-Пролога. Атом может быть числом. Если число имеет предшествующий знак (+ или -), то этот знак рассматривается как отдельный атом. Атом может быть символом, но только не символом пробела. Переменные используются для передачи параметров. Переменные являются атомами, но не
все атомы есть переменные. Турбо-Пролог имеет встроенные предикаты для извлечения атома из строки. Это предикат fronttoken. Его синтаксис следую-
щий:
fronttoken(String, Token, Rest_of_string).
Либо String должна быть означена, либо оба Token и Rest_of_string должны быть означены.
Ниже приводится несколько примеров отношения, определяемого этим предикатом:
1. Предикат fronttoken(Str,"Default","Directory") присваивает Str значение "Default directory".
2. Предикат fronttoken(Str,"$default","$directory") присваивает Str значение "$default$directory".
3. Предикат fronttoken("Pointer",Token,Rest) присваивает Token значение "Pointer", а переменной Rest присваивает значение ""(пустая строка).
4. Предикат fronttoken("$Command",Token,Trail) присваивает Token значение "$", а переменной Trail значение "Command".
5. Предикат fronttoken("$$command",Token,Trail) присваивает Token значение "$", а переменной Trail значение "$command".
6. Предикат fronttoken("!default",Token,Rest) присваивает переменной Token значение "!", а переменной Rest значение "default".
7. Предикат fronttoken("$RUN AI.BAS",Token,Rest) присваивает переменной Token значение "$", а переменной Rest значение "RUN AI.BUS".
Предикат fronttoken может быть использован в правиле преобразования строки в список атомов. Это правило аналогично правилу, которое использовалось для преобразования строки в список аргументов:
convers(Str, [Head|Tail]) :-
fronttoken(Str,Head,Str1),!,
convers(Str1,Tail).
convers(_ , []).