
- •27. Управление программой. Внутренние подпрограммы унификации Пролога.
- •28. Структура программ на Прологе. Предикаты и утверждения.
- •29. Арифметика в Прологе.
- •30. Программирование повторяющихся операций. Повторение и откат.
- •31. Методы повторения. Методы организации рекурсии.
- •32. Списки в Прологе. Применение списков в программе.
- •34. Использование метода с разделением списка на голову и хвост. Компоновка данных в список.
- •34. Присваивание переменным строковых значений. Конкатенация строк. Преобразование данных.
- •35 Создание символьных префиксов. Преобразование строк в список символов.
- •38. Преобразование строк в списки атомов с функторами.
- •39.Предикаты Пролога для работы с файлами. Использование предикатов для работы с файлами.
- •40. Программы для обработки файлов.
- •41. Дозапись данных в файл
- •42. Использование файлов прямого доступа
- •43. Использование предикатов для работы с окнами. Использование окон для ввода вывода.
- •44. Использование графики в программе. Использование графики черепашки.
- •45.Использование звук и музыки.
- •46.Базы данных в Прологе. Предикаты динамической базы данных в Прологе.
- •47. Создание базы данных, располагающейся в оперативной памяти.
- •48. Создание базы данных, располагающейся на диске
- •49. Принципы построения экспертных систем
- •50.Методы вывода и система пользовательского интерфейса эс.
- •51.Экспертные системы, базирующиеся на правилах.
- •52.Экспертные системы, базирующиеся на логике.
35 Создание символьных префиксов. Преобразование строк в список символов.
Создать "префиксный" символ - это значит присоединить этот символ к началу строки. Например, присоединение префикса 'A' к "BCDEF" дает строку "ABCDEF". Эта операция в Турбо-Прологе реализуется с помощью встроенного предиката frontchar:
frontchar(String,Char,Rest_of_string).
Объекту String присваивается значение, состоящее из Char и Rest_of_string (остаток строки).
Например:
frontchar(Str, 'F', "OX").
присваивает символьной переменной Str значение "FOX" (лиса).
Предикат frontchar аналогичен предикату concat, за исключением того, что он присоединяет значение типа char к началу строки.
Преобразование строк в список символов
Предикат frontchar полезен при преобразовании строки в список символов. Пусть, например, необходимо преобразовать строку STARS в список ['S','T','A','R','S']. Метод этого преобразования, заключается в циклическом использовании предиката frontchar для "вырезания" первого символа и размещения его в списке. Правило, которое выполняет эту процедуру, следующее:
convert("", []).
convert(Str, [Head|Tail]) :-
frontchar(Str, Head, Str1),
convert(Str1, Tail).
В ontchar рекурсивно извлекает первый символ из Str и помещает его в список.
36. Специальные строки Пролога.
В Турбо-Прологе определены специальные строки, используемые для определенных целей. Эти строки называются именами. Имена используются для обозначения символических констант, доменов, предикатов и переменных. По определению специальные строки Турбо-Пролога имеют следующие пять свойств:
Строка строится из прописных и строчных букв, цифр и символов подчеркивания.
Например: "A ROSE IS A ROSE IS A ROSE" не является именем Турбо-Пролога, так как содержит пробелы."A_ROSE_IS_A_ROSE_IS_A_ROSE" является именем Турбо-Пролога.
Между символами не должно быть пробелов.
Например: "123LOTUS" не является именем Турбо-Пролога, так как оно начинается с цифры, а "LOTUS123" уже является специальной строкой Турбо-ПРОЛОГа, так как порядок следования символов был изменен так, что цифры теперь следуют за буквами.
Строка начинается с буквы.
Например: "_intelligence" не является именем Турбо-Пролога, так как она начинается специальным символом "_". Но "artificial_" - это строка Турбо-Пролога; наличие подчерка не влияет на ее "допустимость", так как подчерк не первый символ.
Строка не может начинаться любым из специальных символов, указанных в табл. 6.1.
Например: Ctrl-P не является именем Турбо-Пролога, так как это управляющий символ.
Строка не может содержать управляющих символов.
Турбо-Пролог имеет встроенные предикаты, позволяющие проверять является ли строка специальной строкой Турбо-Пролога.
Синтаксис этого предиката следующий: isname(String).
Если String это строка Турбо-Пролога, то предикат будет успешным; в противном случае он будет неуспешным.
37. Формирование атомов из строк.
Атом (token) это последовательность символов. Такая группа символов является специальной строкой Турбо-Пролога. Атом может быть числом. Если число имеет предшествующий знак (+ или -), то этот знак рассматривается как отдельный атом. Атом может быть символом, но только не символом пробела. Переменные используются для передачи параметров. Переменные являются атомами, но не все атомы есть переменные.
Турбо-Пролог имеет встроенные предикаты для извлечения атома из строки. Это предикат fronttoken. Его синтаксис следующий:
fronttoken(String, Token, Rest_of_string).
Либо String должна быть обозначена, либо оба Token и Rest_of_string должны быть обозначены.
Если первый символ строки есть символ из групп с 1 по 4 в табл.6.1, то этот символ присваивается переменной Token, а оставшиеся символы присваиваются Rest_of_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".