Списки – это последовательности символьных элементов,
которые сами могут быть списками. Эти структуры данных очень полезны и
популярны в символьном программировании и в ИИ. В прологе для записи списков
используют символьный атом [] пустого списка и пары с точками – бинарные
функциональные термы. Точка – имя функции. Например, списками являются: [] .(a,X) .(a,.b[]))
Рекурсивное определение:
·
атом [] является списком и представляет пустой список,
·
если L – список и
Т – произвольный терм, то .(T,L) – список с головой Т и хвостом L.
Например, список, состоящий из элементов a,b и с есть
терм вида .(a,.(b,.(c,[])))
Однако для списков существует несколько лучший
синтаксис:
·
символьный атом [] представляет пустой список,
·
непустой список – это последовательность термов,
разделённых запятыми и помещённых в квадратные скобки, причём термы любые, не
обязательно атомы или списки.
Например, [a,b,c], [эта,
маленькая(шапка),[для, кюре]]
Непустой список допускает две эквивалентные записи «с
точками» и «в квадратных скобках». Например, [a]≡.(a,[]) [a,b,c]≡.(a,.(b,.(c,[])))
Представление деревьями - одно и то же для обоих
обозначений (см. рис. 6.3). Обозначение [T|Q] представляет собой список с
заголовком Т и хвостом Q. [A,B,C|Q]
представляет собой список с заголовком А,В,С и хвостом Q. Эти обозначения, использованные для удовлетворения целей,
годны для анализа списков:
? – [T|Q]=[a].
- - - > T=a, Q=[]
? – [A1,A2,_,A4|Q]=[прекрасная, маркиза, ваши, прекрасные, глаза]
- - - > А1= прекрасная, А2 = маркиза, А4 =
прекрасные, Q=[глаза]
Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.