Синтаксис Пролога-10 в основном совпадает с нашим описанием, Правда, он несколько менее строг в отношении того, что считать правильными атомами и переменными, чем те правила, которые приведены в книге. Каждый пример из этой книги удовлетворяет требованиям синтаксиса Пролога-10. Приведем одно важное замечание относительно операторов с высоким приоритетом: поскольку ',' является оператором, то настоятельно рекомендуется во избежание двусмысленности заключать в скобки все термы, записанные с использованием операторов одинакового или более высокого приоритета. Это гарантирует, например, что конструкция
foo(a,b,c)
может быть истолкована только как структура с функтором too от трех аргументов, а не, например, что-нибудь типа
foo(a,','(b,c))
или
foo(','(a,','(b,c)))
Если бы мы хотели записать именно этот последний терм, то это следовало бы сделать так
foo((a,b,c))
Правило относительно операторов высокого приоритета касается только нескольких операторов, таких как ':-' и ';'. Оно означает, что запись вида:
?- retract(parent(A,B):- father(A,B)).
является синтаксически неправильной в смысле Пролога-10. Чтобы сделать ее правильной, нужно добавить пару скобок.
В том случае, если вы работаете с терминалом или с операционной системой, в которых не предусмотрено одновременного использования прописных и строчных букв, можно использовать имеющийся в Прологе-10 альтернативный вариант синтаксиса. В этом синтаксисе отличие переменных от атомов состоит в том, что имена переменных начинаются с литеры подчеркивания «_». Для перехода на этот вариант синтаксиса предусмотрен встроенный предикат nolc (нет строчных букв). Другой встроенный предикат, lс (строчные буквы), позволяет снова переключиться на нормальный синтаксис.
И еще одно маленькое замечание. Функтор '.' (с двумя аргументами) в Прологе-10 не является заранее определенным оператором. При желании вы можете определить его сами, хотя в этом нет необходимости, если при работе со списками вы всегда пользуетесь специальным способом задания списков.
|