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
   30   31   32   33   34   35   36   37   38   39   40