Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Clauses






readlist([H|T]: - readint(H),!, readlist(T).

readlist [ ]).

 

 

Строки, символы и символические имена

Под строкой понимается последовательность из нуля или нескольких символов. В Прологе такая последовательность используется для преобразования двух видов термов: символических имен и строк. Символическое имя – это неправильная последовательность букв, цифр и знака подчеркивания, начинающаяся с маленькой буквы (stol_stul, l1, m1). Символическое имя относится к типу symbol. Строка – это последовательность любых символов, заключенная в двойные кавычки (”stol”), строка относится к типу string. Символические имена можно использовать для именования объектов и отношений, а строки – только для названия объектов и значений их атрибутов. Символические имена и строки автоматически преобразуются друг в друга, и все предикаты, определенные для строки, могут быть применены и к символическим именам. Основное различие между ними в том, что символические имена хранятся в таблице в оперативной памяти и доступ к ним осуществляется быстрее, чем к строкам, обработка которых ведется посимвольно.

Для ввода строк используется предикат readln(Str), для ввода символов – readchar(Ch), а для вывода любых термов – предикат write(…).

Пример. Описания строк, символических имен и символов.

Domains

simvol=char

simvol_imya=symbol

str=string

Пример. Применение предикатов ввода-вывода для различных типов данных.

Goal

write(”Введите символ ”), readchar(Ch), write(”Ch= ”, Ch, ” ”), nl,

write(”Введите строку ”), readln(Str), write(”Str= ”, Str, ” ”), nl,

write(”Введите символическое имя ”), readln(Sym),

write(”Sym”, Sym, ” ”), nl.

Встроенные предикаты для обработки строк:

frontchar(String, FrontChar, RestString)(string, char, string) – (i, o, o) (i, i, o) (i, o, i) (i, i, i) (o, i, i) Разделяет строку String на две части: первый символ FrontChar и оставшаяся часть строки RestString.
fronttoken(String, Token, RestString) (string, string, string) – (i, o, o) (i, i, o) (i, o, i)(i, i, i)(o, i, i) Разделяет строку String на лексему Token и остаток RestString (выполняется только для строк, состоящих из латинских букв).
frontstr(Lenght, InpString, StartString, RestString)(integer, string, string, string) - (i, i, o, o) Отрезает от заданной строки InpString строку StartString из Lenght символов. Выдает оставшуюся часть строки RestString.
concat(String1, String2, String3) (string, string, string) – (i, i, o) (i, o, i) (o, i, i) (i, i, i) Конкатенация двух строк: String3 = String1 + String2.
str_len(String, Length) (string, integer) - (i, i) (i, o) (o, i) Определяет длину строки.
isname(StringParam) (string) - (i) Истинен, если StringParam представляет собой имя, доступное в Турбо-Прологе. Выполняется только для последовательности символов, состоящей из латинских букв.
format(OutputVariable, FormatString, Variable|Constant*) - (o, i, i) Выводит по формату FormatString список вывода Variable|Constant* в строковую переменную OutputVariable

Лексема - это последовательность символов, определяемая как:

· имя в соответствии с синтаксисом Турбо-Пролога,

· строчное представление числа,

· отдельный символ (может быть пустым - пробел).

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

str_list(" ", []).

str_list(S, [H|T]): – frontchar(S, H, S1), str_list(S1, T).

/* пустой строке соответствует пустой список */

/* H — первый символ строки S, S1 — остаток строки */

/* T — список, состоящий из символов, входящих в строку S1*/

Пример. Вычислить длину строки.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.