» » »

Язык Prolog. Синтаксис списков

Списки – это последовательности символьных элементов, которые сами могут быть списками. Эти структуры данных очень полезны и популярны в символьном программировании и в ИИ. В прологе для записи списков используют символьный атом [] пустого списка и пары с точками – бинарные функциональные термы. Точка – имя функции. Например, списками являются: [] .(a,X) .(a,.b[]))

Рекурсивное определение:

·                   атом [] является списком и представляет пустой список,

·                   если L – список и Т – произвольный терм, то .(T,L) – список с головой Т и хвостом L.

Например, список, состоящий из элементов a,b и с есть терм вида .(a,.(b,.(c,[])))

Однако для списков существует несколько лучший синтаксис:

·                   символьный атом [] представляет пустой список,

·                   непустой список – это последовательность термов, разделённых запятыми и помещённых в квадратные скобки, причём термы любые, не обязательно атомы или списки.

Например, [a,b,c], [эта, маленькая(шапка),[для, кюре]]

Непустой список допускает две эквивалентные записи «с точками» и «в квадратных скобках». Например, [a]≡.(a,[]) [a,b,c]≡.(a,.(b,.(c,[])))

 src=img/17-2-1.jpg

 

Представление деревьями - одно и то же для обоих обозначений (см. рис. 6.3). Обозначение [T|Q] представляет собой список с заголовком Т и хвостом Q. [A,B,C|Q] представляет собой список с заголовком А,В,С и хвостом Q. Эти обозначения, использованные для удовлетворения целей, годны для анализа списков:

 

? – [T|Q]=[a].

- - - > T=a, Q=[]

? – [A1,A2,_,A4|Q]=[прекрасная, маркиза, ваши, прекрасные, глаза]

- - - > А1= прекрасная, А2 = маркиза, А4 = прекрасные, Q=[глаза]


Друзья! Приглашаем вас к обсуждению. Если у вас есть своё мнение, напишите нам в комментарии.