Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шумихин / Шумихин / Шумихин - лекция 12

.txt
Скачиваний:
7
Добавлен:
20.05.2015
Размер:
2.68 Кб
Скачать
ЛЕКЦИЯ 12
23.11.12

Работа со строками

1. str_len(S, N)
Определяет количество символов N в строке S.
Потоки параметров:
i o (длина строки)
i i (проверить, правда ли, что длина строки такова)
o i (выдаёт строку, состоящую из N пробелов)

2. concat(S1, S2, S3)
Конкатенация строк.
S3 = S1 + S2
Потоки параметров:
i i o
i o i
o i i (так можно расщепить предложение на несколько частей)
i i i

3. frontchar(S, C, S1)
Разделяет строку S на первый символ C и остаток S1.
Потоки параметров:
i o o
o i i (к строке S1 в начало дописывается символ C)
i i o (если первый символ строки S совпадает с C, то в S1 остаток)
i o i
i i i

4. frontstr(N, S, S1, S2)
Отщепить строку из первых N символов.

5. fronttoken(S, A, S1)
От строки S отщепить атом A, и оставшаяся часть строки -- S1.

fronttoken("all student do fine", A, S1)
A = all
S1 = " student do fine"

fronttoken("848all student do fine", A, S1)
A = 848
S1 = " student do fine"

Допустимые потоки:
i o o (очевидно)
o i i
i i o
i o i
i i i

6. format
Задаёт строку формата вывода.

Подробное описание предиката:
смысл, допустимые потоки

ЗАДАЧИ
1. Предикат, который преобразует строку в список символов
str_list(S, L)

str_list("", []) :- !.
str_list(S, [H|T]) :- frontchar(S, H, S1), str_list(S1, T).

2. list_str(L, S)
Список L в строку S.

list_str([], "") :- !.
list_str([H|T], S) :- list_str(T, S1), frontchar(S, H, S1).

3. char_count(S, C, N).

char_count("", _, 0).
char_count(S, C, N) :- frontchar(S, C, S1), !, char_count(S1, C, NewN), N = NewN+1.
char_count(S, C, N) :- frontchar(S, _, S1), char_count(S1, C, N).

4. str_pos(C, S, N)

str_pos(C, S, N) :- str_list(S, L), number(S, C, N).

str_pos(C, S, 1) :- frontchar(S, C, _), !.
str_pos(C, S, N) :- frontchar(S, _, S1), str_pos(C, S1, N1), N1<>0, !, N=N1+1.
str_pos(_, _, 0).

5. str_rop(S, C, C1, S1)
Заменяет C на C1, результат -- S1.

str_rop("", _, _, "") :- !.
str_rop(S, C, C1, S1) :- frontchar(S, C, K), str_rop(K, C, C1, K2), frontcar(S1, C, K2).