Я услышал, что в Прологе, программа и данные являются тем же самым. Что это означает?
Это означает, что ваша программа реализована как набор правил, а данные также реализованы как набор правил - нет различия между правилом, которое вызывает некоторые операции, которые должны произойти (программа), и правило, которое просто возвращает значение данных.
Термины относятся к данным, но программа также описывается с помощью терминов.
Источник пролога - это просто список правил. Некоторые правила являются просто «данными» - они истинны
без дальнейшей обработки.
person(james).
father(james, thomas).
«Джеймс - личность». «Джеймс - отец Фомы».
Эти правила являются данными.
Я могу выполнить запрос к этим данным. Я могу спросить:
?- person(X).
Ответ будет:
X = james.
Или:
?- father(X, thomas).
Ответ будет таким же.
Другие правила нуждаются в дальнейшей оценке.
grandfather(X, Z) :- father(X, Y), father(Y, Z).
Это простая «программа».
Наша дедушка программа вернет истину, если у нас есть правильные данные. Например:
father(james, william).
father(james, tyler).
father(james, thomas).
father(jeff, james).
Если я выполняю следующую программу:
?- grandfather(jeff, X).
Я получаю:
X = william
Я могу попросить пролог продолжить, и я получу X = tyler
и X = thomas
.
Синтаксис усложняется, но основы остаются прежними. Данные и программа - это всего лишь набор фактов. Искусство пролога заключается в создании правильных правил, которые приводят вычисления к результату.
?- A=write(B), C=(B is 1+2), Prog = (C, A).
A = write(B),
C = (B is 1+2),
Prog = (B is 1+2, write(B)).
?- $Prog.
3
true.