Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРОЛОГ.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
98.8 Кб
Скачать

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. Специальные строки Пролога.

В Турбо-Прологе определены специальные строки, используемые для определенных целей. Эти строки называются именами. Имена используются для обозначения символических констант, доменов, предикатов и переменных. По определению специальные строки Турбо-Пролога имеют следующие пять свойств:

  1. Строка строится из прописных и строчных букв, цифр и символов подчеркивания.

Например: "A ROSE IS A ROSE IS A ROSE" не является именем Турбо-Пролога, так как содержит пробелы."A_ROSE_IS_A_ROSE_IS_A_ROSE" является именем Турбо-Пролога.

  1. Между символами не должно быть пробелов.

Например: "123LOTUS" не является именем Турбо-Пролога, так как оно начинается с цифры, а "LOTUS123" уже является специальной строкой Турбо-ПРОЛОГа, так как порядок следования символов был изменен так, что цифры теперь следуют за буквами.

  1. Строка начинается с буквы.

Например: "_intelligence" не является именем Турбо-Пролога, так как она начинается специальным символом "_". Но "artificial_" - это строка Турбо-Пролога; наличие подчерка не влияет на ее "допустимость", так как подчерк не первый символ.

  1. Строка не может начинаться любым из специальных символов, указанных в табл. 6.1.

Например: Ctrl-P не является именем Турбо-Пролога, так как это управляющий символ.

  1. Строка не может содержать управляющих символов.

Турбо-Пролог имеет встроенные предикаты, позволяющие проверять является ли строка специальной строкой Турбо-Пролога.

Синтаксис этого предиката следующий: 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".