Неопределенные предикаты
В некоторых версиях 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
Service Unavailable
The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.