Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы программирования на языке Turbo Prolog.doc
Скачиваний:
24
Добавлен:
09.11.2019
Размер:
563.2 Кб
Скачать

5. Применение списков в программе

Для того чтобы использовать в программе список, необходимо описать предикат списка. Ниже приведены примеры таких предикатов:

num([1,2,3,6,9,3,4])

time(["YESTERDAY","TODAY","TOMORROW"])

В этих выражениях num и time представляют предикаты списков. Предикатам списков обычно присваиваются имена, которые характеризуют либо тип элемента (num), либо сами данные (time).

Введение списков в программу с необходимостью отражается на трех ее разделах. Домен списка должен быть описан в разделе domains, а работающий со списком предикат — в разделе predicates. Наконец, нужно ввести сам список; то есть, другими словами, его нужно задать где-то в программе: либо в разделе clauses, либо в разделе goal.

Покажем, как можно создавать в программе списки и как их использовать.

animals(["monkey","piton","lion","white eagle"])

Если этот список необходимо использовать в программе, то следует описать домен элемента списка; ему логично присвоить имя подобное name_animals.

Отличительной особенностью описания списка является наличие звездочки (*) после имени домена элементов. Так запись

name_animals *

следует понимать как список, состоящий из элементов домена name_animals.

Описание в разделе domains, следовательно, может выглядеть либо как

animals_list = name_animals *

name_animals = symbol

либо как

animals_list = symbol *

Домен animals_list является доменом списка элементов типа symbol.

В разделе описания предикатов predicates требуется присутствия имени предиката, а за ним заключенного в круглые скобки имени домена.

animals(animals_list)

Как видим, описание предиката списка ни в чем не отличается от описания обычного предиката. Сам список присутствует в разделе утверждений

clauses

animals(["monkey","piton","lion","white eagle"]).

Пример использования списков приведен в программе 6.1 «Списки», в которую дополнительно включены два списка из целых чисел (домен integer*) и предикат num.

/* Программа 6.1 «Списки». Назначение: */

/* демонстрация работы со списками. */

domains

animals_list = name_animals *

name_animals = symbol

predicates

animals(animals_list)

num(integer *)

goal

L=[6,7,8],write(L),nl,

animals(L1),write(L1),nl,

num(L2),write(L2).

clauses

animals(["monkey","piton","lion","white eagle"]).

num[1,2,3,4]).

/* Конец программы */

Упражнение 6.1.

Адресуйте программе следующие внешние запросы:

animals(All).

animals([_,_,B,_]).

animals([B1,B2,_,_]).

num(All).

num([F,S,T,A]).

Поясним теперь работу программы при задании каждой из этих целей, это прояснит способ работы со списками в программах на Турбо-Прологе.

Заметим, что свободная переменная All представляет весь список в целом. Он рассматривается при этом как некое целое, элементы играют роль частей этого целого.

Что касается второй цели, animals([_,_,B,_]), то процесс сопоставления начинается с первого элемента. Первые три переменные в целевом утверждении являются анонимными,переменной B присваивается значение lion.

Третья цель, animals([B1,B2,_,_]), запрашивает первые два элемента списка. На выходе можно будет увидеть B1=monkey, B2=piton, т.е. значения первого и второго элементов списка.