Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LECT_P1.DOC
Скачиваний:
13
Добавлен:
21.12.2018
Размер:
985.6 Кб
Скачать

Переменные

Понятие переменной в Прологе отличается от принятого во мно­гих языках программирования. Переменная не рассматривается как выделенный участок памяти. Она служит для обозначения объекта, на который нельзя сослаться по имени. Переменную можно считать локальным именем для некоторого объекта.

Синтаксис переменной довольно прост. Она должна начинаться с прописной буквы или символа подчеркивания и содержать только символы букв, цифр и подчеркивания.

Переменная, состоящая только из символа подчеркивания, назы­вается анонимной и используется в том случае, если имя переменной несущественно.

Область действия переменных

Областью действия переменной является утверждение. В преде­лах утверждения одно и то же имя принадлежит одной и той же пе­ременной. Два утверждения могут использовать одно имя перемен­ной совершенно различным образом. Правило определения области действия переменной справедливо также в случае рекурсии и в том случае, когда несколько утверждений имеют одну и ту же головную цель. Этот вопрос будет рассмотрен в далее.

Единственным исключением из правила определения области действия переменных является анонимная переменная, например, «_» в цели любит(Х,_). Каждая анонимная переменная есть отдель­ная сущность. Она применяется тогда, когда конкретное значение переменной несущественно для данного утверждения. Таким обра­зом, каждая анонимная переменная четко отличается от всех других анонимных переменных в утверждении.

Переменные, отличные от анонимных, называются именованны­ми, а неконкретизированные (переменные, которым не было присво­ено значение) называются свободными.

Сложные термы, или структуры

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

Приведем примеры структурированных термов:

собака(рекс), родитель(Х,У).

Число компонент в структуре называется арностью структуры. Так, в данном примере структура собака имеет арность 1 (записыва­ется как собака/1), а структура родитель - арность 2 (родитель/2). Заметим, что атом можно рассматривать как структуру арности 0.

Для некоторых типов структур допустимо использование альтер­нативных форм синтаксиса. Это синтаксис операторов для структур арности 1 и 2, синтаксис списков для структур в форме списков и син­таксис строк для структур, являющихся списками кодов символов.

Синтаксис операторов

Структуры арности 1 и 2 могут быть записаны в операторной форме, если атом, используемый как главный функтор в структуре, объявить оператором (см. гл. 6).

Синтаксис списков

В сущности, список есть не что иное, как некоторая структура арности 2. Данная структура становится интересной и чрезвычайно полезной в случае, когда вторая компонента тоже является списком. Вследствие важности таких структур в Прологе имеются специаль­ные средства для записи списков. Возможности обработки списков рассматриваются в разд. 5.1.

Синтаксис строк

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

В некоторых реализациях Пролога строки рассматриваются как определенный тип объектов подобно атомам или спискам. Для их об­работки вводятся специальные встроенные предикаты. В других реа­лизациях строки обрабатываются в точности так же, как списки, при этом используются встроенные предикаты для обработки списков. Поскольку все строки могут быть определены как атомы или как спи­ски целых чисел, и понятие строки является чисто синтаксическим, мы не будем более к нему возвращаться.

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