Page 35 - 4800
P. 35
4.2 Використання списків у Пролог-програмах
Застосування списків у програмі відображається у трьох її розділах. Домен
списку повинен бути описаний у секції domains, а працюючий зі списком предикат – у
секції predicates. Нарешті, потрібно задати сам список у секції clauses або goal.
Розглянемо приклад простої програми, що використовує у своєму складі список.
/* програма 4.1 */
domains
list_sеаsоn=season*
season=string
pedicates
year(list_season)
clauses
year([„зима”, „весна”, „літо”, „осінь”])
Ця програма містить список пір року. Найменування сезонів є даними
символьного типу і являють собою домен елементів списку. Відмінною рисою в описі
списку є наявність символу зірочки (*) після імені домену елементів.
Опис предиката нічим не відрізняється від звичайного, коли в дужках після його
імені вказується набір аргументів. Для вивчення правил формування запитів до
спискових структур, а також з метою вивчення правил уніфікації змінних елементами
списку виконаємо ряд запитів до програми.
Розглянемо ще три приклади програм. Програма 4.2 показує можливість
використання в предикатах спискових структур разом з іншими доменними
структурами (предикат office містить цілочисльний і списковий домени).
/* програма 4.2 */
domains
number=integer
worker=string
list_worker=worker*
predicates
office(number,list_worker)
clauses
office(101,["Кардаш", "Петренко", "Маслов"]).
office(211,[ "Денега" ]).
/* програма 4.3 */
domains
number,salary=integer
name=string
member=worker(name,salary)
list_worker=member*
predicates
office(number,list_worker)
clauses
office(101,[worker("Кардаш",500), worker("Петренко",300), worker("Маслов",
200)]).
office(211,[ worker("Денега", 400)]).
/* програма 4.4 */
domains
name = string
list_worker = name*
number = integer
office = office(number , list_worker)
list_office = office*
predicates
all_office( list_offlce )
clauses
all_office([office(101,["Кардаш","Петренко","Маслов"]), office(211,["Денега"]) ]).
Програма 4.3 ілюструє той факт, що елементами списку можуть бути не тільки
стандартні домени, але і будь-які, обумовлені користувачем складні структури. Так,
35