Любая система программирования Пролог содержит большое количество встроенных предикатов. Здесь очень кратко описываются некоторые из них. Исчерпывающее их описание дано в документации. Справку по встроенным предикатам можно получить, выполнив запрос
?-help(имя-предиката).
Классификация термов
var(X) согласуется, если X - неконкретизированная переменная.
nonvar(X) согласуется, если X - конкретизированная переменная.
atom(X) согласуется, если X - атом.
integer(X) согласуется, если X - число.
atomic(X) согласуется, если X - атом или число.
Работа с утверждениями
asserta(X), assertz(X) добавляют утверждение в Пролог-программу, при этом значение X должно быть таким, чтобы могло интерпретироваться как утверждение.
retract(X) удаляет из программы первое утверждение, соспоставимое (унифицируемое) с X. Рассмотренные предикаты необратимы, т.е. их действие не отменяется при возврате.
clause(X,Y) сопоставляет X и Y с заголовком и телом имеющегося в программе утверждения К этому моменту X должен быть достаточно конкретизирован. При возврате - переход на следующее утверждение. Для фактов Y конкретизируется значением true. Напоминаем, что любое утверждение Пролога - структура, где ":-", "?-", "," и т.п. - функторы, имеющие вид инфиксных операторов.
Работа со стуктурами
functor(S,F,N) согласуется при условии, что S - структура с функтором F и количеством аргументов N. Используется а) для анализа существующих структур и б) для создания структур с заданными функтором и количеством аргументов.
arg(N,S,X) сопоставляет N-ый аргумент структуры S с X.
S=..L сопоставляет структуру S со списком L, первый элемент которого рассматривается как функтор, а остальные - как аргументы. Также используется двояко.
name(A,L) сопоставляет атом A и список десятичных ASCII-кодов L.
Составные цели
"," - коньюнкция целевых утверждений.
";" - дизъюнкция целевых утверждений.
call(X) согласуется, если согласуется X, рассматриваемое как целевое утверждение.
not(X) согласуется, если не согласуется X, рассматриваемое как целевое утверждение.
bagof(T,G,L) порождает список L всех объектов T, удовлетворяющих цели G, принимая во внимание одинаковость конкретизации остальных переменных цели G.
setof(T,G,L) аналогичен bagof(), но дополнительно упорядочивает список L, исключая дублирующие элементы.
findall(T,G,L) порождает список L всех объектов T, удовлетворяющих цели G, игнорируя различия в конкретизации остальных переменных цели G.
Ввод-вывод
write(X) записывает терм X в текущий поток вывода.
nl выводит символ "новая строка".
tab(N) выводит N пробелов.
put(X) выводит символ, имеющий десятичный ASCII-код X.
read(X) читает очередной терм из входного потока, сопоставляя его с X (при этом читаемый терм должен заканчиваться точкой).
get0(X) сопоставляет X и следующий символ из входного потока.
get(X) выполняет то же, что и get0(X), но только для символов, имеющих графическое изображение.
skip(X) пропускает символы входного потока, пока не встретится сопоставимый с X.
Примечание 1
Все предикаты ввода-вывода необратимы, т.е. их действие при возврате не отменяется, пересогласовать их невозможно.