Обработка строк в Prolog выполняется с помощью встроенных предикатов. Рассмотрим основные предикаты управления строками.
Строки и их обработка подчиняются определенным правилам. Так, в строках Visual Prolog обратный слэш (\) является управляющим символом, позволяющим вставлять в строки символы, которых нет на клавиатуре.

Предикат frontChar

Предикат frontChar действует согласно равенству: String1 = объединение Char и String2 и имеет следующий формат:

frontChar (Stringl, Char, String2).
Предикат frontChar имеет три аргумента: первый из них – строка, второй – символ (первый символ первой строки), третий – остаток первой строки.
Предикат frontChar можно использовать для расщепления строки в последовательность символов или для создания строки из последовательности символов, а также для проверки символов в строке. Если аргумент String1 связан со строкой нулевой длины, то предикат завершается не успешно.

Предикат frontToken

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

frontToken (Stringl, Token, Rest)
В случае потока (i, o, o) frontToken находит первую лексему в String1, связывает ее с Token, а остаток String1 связывает с Rest.
Варианты потока (i, i,o), (i, o, i), а также (i, i, i) служат для проверки: если связанные аргументы соответствуют частям String1 (первой лексеме, всему, что находится после первой лексемы, или же тому и другому), то frontToken завершается успешно, в противном случае – не успешно.
В случае если использован поток (o, i, i), предикат создает объединение Token и Rest, связывая String1 с результатом.
Последовательность знаков является лексемой, если это либо имя в соответствии с синтаксисом Visual Prolog, либо число (предшествующий ему знак является отдельной лексемой), либо отличный от пробела знак.
Предикат frontToken отлично приспособлен для разбиения строки на лексические символы.

Предикат front

Предикат front расщепляет String1 на две части. Синтаксис предиката:

front(String1, NumberOfChars, StartStr, EndStr)
где StartStr содержит NumberOfChars первых символов из String1, a EndStr содержит остаток.

Предикат concat

Предикат concat устанавливает, что строка StringS является результатом сцепления String1 и String2. Он имеет форму:

StringS = concat(String1, String2)

Например, мы вызываем Str = concat("croco", "dile"), тогда Str = "crocodile".

Предикат length

Предикат length определяет длину строки. Он имеет формат:

Length = length(StringArg)
Предикат length связывает переменную Length с длиной строки StringArg. Length имеет тип charCount.

Предикат create

Предикат create создает строку указанной длинны. Он имеет формат:

Str = create(Length) или Str = create(Length, Str1)

Предикат create связывает переменную Str с длиной строки Length. То есть есть Srt1 не задана, то создается пустая строка длинной Length, в другом случае в Str записывается строка Str1 и дублируется пока не будут заполнены все Length-символов.

Предикат isName

Предикат isName проверяет, является ли аргумент допустимым именем согласно синтаксису Visual Prolog, и имеет формат:

isName(String)
Имя начинается с буквы алфавита или символа подчеркивания, за которым следует любое число букв, цифр и символов подчеркивания. Предыдущие и последующие пробелы игнорируются.

Предикат format

Если вы хотите правильно отформатировать числа или другие простые термы при преобразовании их в строку, вы можете использовать функцию форматирования format.
Рассмотрим пример:

implement main

open core, console, string

clauses
	run():-
		init(),
		Str1= format("%8.3f\n %10.1e\n", 3.45678, 35678.0),
		Str2= format("%d\n %10d\n", 456, 18),
		Str3= format("%-10d\n %010d\n", 18, 18),
		write(Str1, Str2, Str3),
		_ = readLine().

end implement main

goal
	mainExe::run(main::run).
В примере формат "%8.3f\n" означает, что нужно отобразить действительное число и выполнить возврат каретки; ширина поля, отведённого для числа, равна 8 знакам, число должно быть отображено с тремя знаками после запятой. Формат "%010d\n" выражает требование целого числа, выровненного по правому краю поля шириной 10; пустые места поля должны быть заполнены нулями. Формат "%-10d\n" определяет представление целого числа, выровненного по левому краю поля шириной 10; знак минус указывает на левое выравнивание, правое выравнивание установлено по умолчанию. Формат "%10.1e\n" определяет научную запись для действительных чисел.
Далее приведён список типов данных, принимаемых форматируемой строкой. Заметим, что при конвертации действительных чисел в текстовое представление они обрезаются и округляются до 17 цифр, если не была указана другая точность.
• f – форматировать как действительное число с фиксированной запятой (как 123.4);
• e – форматировать действительное число в экспоненциальной записи (как 1.234e+002);
• g – форматировать в либо формате f, либо в формате e — как запись будет короче;
• d – форматировать как знаковое целое;
• u – форматировать как беззнаковое целое;
• x – форматировать как шестнадцатеричное число;
• o – форматировать как восьмеричное число;
• c – форматировать как символ;
• B – форматировать как двоичный тип Visual Prolog;
• R – форматировать как номер ссылки базы данных;
• P – форматировать как параметр процедуры;
• s – форматировать как строку.

Предикат subСhar

Предикат subСhar возвращает символ на данной позиции строки:

Char = subChar(String, Position)
Первый символ строки имеет позицию 1. Например: Char = subChar("ABC", 2) свяжет Char с C, так как отсчет начинается с нуля. Если позиция определяет символ за концом строки (несуществующий символ), subChar завершится с ошибкой.

Предикат subString

Предикат subString возвращает часть строки. Его формат:

Str_out = subString(Str_in, Pos, Len)
Переменная Str_out будет связана с копией части строки Str_in, начиная с символа на позиции Роs и длиной Len. Например: SubStr = subString("GOLORP", 1, 3) связывает SubStr с "OLO". Если Pos и Len задают строку частично или полностью вне границ Str_in, то subString завершается с ошибкой. Однако запрос 0 байт на самом конце строки не является ошибкой: SubStr = subString("ABC", 4, 0) свяжет SubStr с пустой строкой, тогда как SubStr = subString("ABC", 4, 1) является ошибкой, так же, как и SubStr = subString("ABC",5,-1).

Далее приведен список других предикатов, которые могуть быть полезны при разработке ваших приложений. В них параметры adjustBehaviour, adjustSide и case-Sensivity имеют следующие определения:

domains 
	adjustBehaviour = expand(); cutRear(); cutOpposite(). 
	adjustSide = left(); right(). 
	caseSensitivity = caseSensitive();
		caseInsensitive(); 
		casePreserve(). 
adjust : (string Src, charCount FieldSize, adjustSide Side) -> string AdjustedString. 
adjust : (string Src, charCount FieldSize, string Padding, adjustSide Side) -> string AdjustedString. 
adjustLeft : (string Src, charCount FieldSize) -> string AdjustedString. 
adjustLeft : (string Src, charCount FieldSize, string Padding) -> string AdjustedString. 
adjustRight : (string Src, charCount FieldSize) -> string AdjustedString. 
adjustRight : (string Src, charCount FieldSize, string Padding) -> string AdjustedString. 
adjustRight: (string Src, charCount FieldSize, string Padding, adjustBehaviour Behaviour) -> string AdjustedString.
concatList: (core::string_list Source) -> string Output procedure (i). 
concatWithDelimiter: (core::string_list Source, string Delimiter) -> string Output procedure (i,i).
createFromCharList: (core::char_list CharList) -> string String.
equalIgnoreCase: (string First, string Second) determ (i,i). 
getCharFromValue: (core::unsigned16 Value) -> char Char. 
getCharValue : (char Char) -> core::unsigned16 Value. 
hasAlpha: (string Source) determ (i). 
hasDecimalDigits : (string Source) determ (i). 
hasPrefix : (string Source, string Prefix, string Rest) determ (i,i,o). 
hasSuffix : (string Source, string Suffix, string Rest) determ (i,i,o). 
isLowerCase : (string Source) determ (i). 
isUpperCase : (string Source) determ (i). 
isWhiteSpace : (string Source) determ. 
lastChar : (string Source, string First, char Last) determ (i,o,o). 
replace: (string Source, string ReplaceWhat, string ReplaceWith, caseSensitivity Case) -> string Output procedure 
replaceAll : ( string Source, string ReplaceWhat, string ReplaceWith) -> string Output. 
replaceAll : ( string Source, string ReplaceWhat, string ReplaceWith, caseSensitivity Case) -> string Output. 
search: (string Source, string LookFor) -> charCount Position determ (i,i). 
search: (string Source, string LookFor, caseSensitivity Case) -> charCount Position determ (i,i,i). 
split: (string Input, string Separators) -> string_list. 
split_delimiter : (string Source, string Delimiter) -> core::string_list List procedure (i,i). 
subString : (string Source, charCount Position, charCount HowLong) -> string Output procedure (i,i,i). 
/*Конвертирует буквы в строке в строчные*/
toLowerCase : (string Source) -> string Output procedure (i). 
/*Конвертирует буквы в строке в прописные*/
toUpperCase : (string Source) -> string Output procedure (i).
/*Удаляет предшествующие и последующие строке пробелы.*/ 
trim : (string Source) -> string Output procedure (i). 
/*Удаляет предшествующие строке пробелы.*/
trimFront : (string Source) -> string Output procedure (i). 
 /*Удаляет группы пробелов из строки Source.*/
trimInner : (string Source) -> string Output procedure (i). 
/*Удаляет следующие за строкой пробелы.*/
trimRear : (string Source) -> string Output procedure (i).

                                                                       << предыдущий | следующий >>


2016-06-07 • Просмотров [ 241 ]