Использование списков
Список – специальный вид сложного терма, состоящий из последовательности термов, заключенных в [ ] и разделенных запятыми.
domains
list = integer* % целочисленный список
Если элементы списка имеют смешанный тип, то должно быть соответствующее описание:
domains
element = c (char); i (integer)
>list = element*
[c(‘a’), i(6), i(-8), c(‘X’)]
Списки являются основной структурой программы на ТП. Для удобства обработки введены два понятия: голова (head), хвост (tail).
Основные примеры обработки списков:
Список |
Голова |
Хвост |
[‘a’, ‘b’, ‘c’] |
‘a’ |
[‘b’, ‘c’] |
[1] |
1 |
[ ] |
[ ] |
не определена |
не определена |
[[1, 2, 3], [2, 3, 4], [ ]] |
[1, 2, 3] |
[[2, 3, 4], [ ]] |
Для отделения головы спсика от хвоста используется символ "|” [X|Y].
Примеры работы со списком
Сцепление двух спиcков.
concat ([ ], L, L).
concat ([H|T], L2, [H|T3]):- concat (T, L2, T3).
Добавление элемента Х к началу списка L
add (X, L, [X|L]
в конец
add_end (X, L, L1)
add_end (X, [ ], [X]).
add_end (X, [H|T], [H|T1]):- add_end (X, T, T1).
обращение списка
domains
l =real*
predicates
revers (l, l)
reversl (l, l, l)
clauses
revers (L, Lr):- reversl (L, [ ], Lr).
reversl ([ ], Lr, Lr)./span>
reversl ([H|T], L, Lr):- reversl (T, [H|L], Lr).