Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1414-Лекции.doc
Скачиваний:
29
Добавлен:
25.12.2018
Размер:
419.84 Кб
Скачать

4.2.2.2 Переменные

Переменные в Турбо-Прологе служат для обозначения объектов, на которые нельзя ссылаться по имени. Они, в отличие от процедурных языков программирования, определяют не некоторую область зарезервированной памяти, а имя самого неизвестного, и получают свои значения во время выполнения программы при сопоставлении их с константами. Синтаксически переменная ставится на место неизвестного терма в выражениях (фактах, правилах, целях) и должна начинаться с большой буквы, или с символа подчеркивания. Например:

roditel (X, vera). или roditel (_X, vera).

Так определяется цель на поиск всех родителей (X либо _X) Веры (vera).

Переменная, состоящая только из символа подчеркивания, называется анонимной. Анонимная переменная (в отличие от именованной) используется в том случае, если принимаемое ей значение не существенно для данного выражения, т.е. может быть любым.

Область действия именованной переменной ограничивается только тем выражением, в котором она используется. Поэтому в разных выражениях одно и то же имя переменной можно использовать совершенно различным образом. В этом смысле анонимная переменная отличается от именованной. Каждая анонимная переменная есть отдельная сущность, которая никогда не примет какого-либо конкретного значения, и поэтому несколько анонимных переменных в рамках одного и того же выражения отличаются друг от друга (т.е. являются различными сущностями).

4.2.2.3 Структуры

Структуры – это составные термы, которые, в отличие от простых состоят из совокупности термов (как простых, так и составных), объединяемых в единое целое. Структуре присваивается некоторое объединительное имя, отражающее сущность совокупности объединенных термов. Синтаксически описание структуры в Турбо-Прологе имеет вид:

f (t1, t2,…,tn).

Здесь f – имя структуры; t1, t2,…,tn – термы, являющиеся его аргументами.

Количество термов в структуре определяет ее арность. Структуры арности ноль являются простыми термами.

Примером описания тернарной структуры может служить следующая конструкция:

data (12, "Mart", 1999).

Здесь data - имя структуры, объединяющей три простых терма. Из этой структуры, например, можно составить более сложную структуру, включив в нее еще один унарный составной терм sotr("Петров"). Присвоив этой новой структуре объединительное имя data_sotr получим:

data_sotr (data (12, "Mart", 1999), sotr("Петров")).

Замечание: Структура – это сложный объект, который можно использовать и обрабатывать аналогично простым термам.

4.2.2.3 Списки

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

Элементами списка могут быть простые термы и структуры, включая сами списки.

Различают списки фиксированной и произвольной длины (длина списка - это количество элементов списка).

Синтаксически элементы списков фиксированной длины отделяются друг от друга запятой и заключаются в квадратные скобки, например:

[4, 5, -3, 1] - список целых чисел (длина списка = 4);

[sob, rot, pet] - список символических имен;

[telefon (lena, 2683243), telefon (ana, 1692627)] - список бинарных структур;

[[a, b, c], [f, g]] - список списков символических имен;

[ ] - пустой список (длина списка =0).

Синтаксически списки произвольной длины задаются либо явно, либо неявно (т.е. с помощью переменных) и называются головой списка. Остальные элементы называются хвостом списка. Хвост списка отделяется от головы специальным знаком “|” и задается только в неявном виде. Хвост списка всегда должен быть только списком и может включать пустой список. Голова списка - всегда элемент или совокупность элементов (но не список).

Голова, хвост и разделяющий их знак (функтор списка) заключаются в квадратные скобки, например:

[ 1, 2, | X ]

[ d | [ ] ]

[ X|Y ]

[ X, [ Y|Z ] ]

Тип элементов списка обязательно должен декларироваться в разделе domains программы, а сами списки задаются в разделе clauses.

Замечание: Списки – это сложные объекты, которые можно использовать и обрабатывать аналогично простым термам.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]