Неопределенные предикаты
В некоторых версиях 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