logo
TurboProlog / Документация / TOM_1

Принадлежность к списку

Предположим, что у вас есть список имен John, Leonapd, Eric и Frank,

и вы хотите используя Турбо Пролог проверить имеется ли заданное имя в

этом списке. Другими словами, вам нужно выяснить отношение "Принадлеж-

ность" между двумя аргументами - именем и списком имен. Это выражается

предикатом

member(name, namelist). /* "name" принадлежит "namelist"*/

В программе CH08EX06.PRO первое предложение проверяет голову списка.

Если голова списка совпадает с именем, которое вы ищете, то можно заклю-

чить, что имя принадлежит списку. Так как хвост списка не представляет

интереса, он обозначается неопределенной переменной. По первому предложе-

нию целевое утверждение

member(john, [john, leonard, eric, frank])

будет выполнено.

/*Программа CH08EX06.PRO - принадлежность к списку*/

domains

namelist = name*

name = symbol

predicates

member(name, namelist)

clauses

member(Name, [Name|_]).

member(Name, [_|Tail]) :- member(Name, Tail).

Если голова списка не совпадает с Name (имя), то нужно проверить,

можно ли Name найти в хвосте списка.

На обычном языке:

Имя принадлежит списку, если имя есть первый элемент списка или Имя

принадлежит списку, если имя принадлежит хвосту.

Второе предложение в Турбо Прологе, выражающее отношение принадлеж-

ности выглядит так:

member(Name, [_|Tail]) :- member(Name, Tail).