Неопределенные предикаты

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


го типа можно обеспечить неудачное завершение неопределенных предикатов (без со­общений об ошибках) с помощью встроенного предиката наподобие unknown ( _,

•г л i : ;.

Отрицание как недостижение успеха - операторы not и "\ + "

В данной книге для обозначения операции отрицания как недостижения успеха применялась конструкция not Goal. Но во многих версиях Prolog (и в стандарте) предусмотрено использование другого обозначения (возможно, менее привлекатель­ного) следующим образом: \+Goal

Такое обозначение позволяет подчеркнуть, что данная операция определяет не на­стоящее логическое отрицание, а отрицание, определенное как недостижение цели. Для совместимости с другими версиями Prolog оператор "not" необходимо заменить оператором "\+ " или (чтобы уменьшить для себя объем работы) ввести в программу not как предикат, определяемый пользователем (подробно об этом — в приложении Б).

Предикат name( Atom, CodeList)

Этот предикат предусмотрен во многих реализациях, но не включен в стандарт (вместо этого задан предикат atom__codes/2). В разных версиях Prolog имеются не­большие различия, связанные с выполнением предиката name в частных случаях, например, когда первым параметром является число.

Загрузка программ с помощью предикатов consult и reconsult

В различных реализациях применяются немного разные процедуры загрузки про­грамм с помощью предикатов consult и reconsult. Различия обнаруживаются, ес­ли программы загружаются из нескольких файлов, а один и тот же предикат опреде­лен больше чем в одном файле (один из способов обработки состоит в том, что новые предложения, относящиеся к тому же предикату, могут просто добавляться к старым предложениям, а другой способ предусматривает загрузку только предложений из самого последнего файла и уничтожение предыдущих предложений, относящихся к тому же предикату).

Модули

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


Приложение А. Некоторые различия мевду реализациями Prolog