Я слышал, что в Prolog программа и данные - одно и то же. Что это значит?
Программа и данные в Prolog одинаковы?
Ответ 1
Это означает, что ваша программа реализована в виде множества правил, а данные также реализованы как набор правил - нет различия между правилом, которое вызывает некоторые операции (программа), и правилом, которое просто дает назад значение данных.
Ответ 2
Источник Prolog - это всего лишь список правил. Некоторые правила - это просто "данные" - они true
без дальнейшей оценки.
person(james).
father(james, thomas).
"Джеймс - это человек". "Джеймс - отец тома".
Эти правила являются данными.
Я могу запустить запрос по этим данным. Я могу спросить:
?- person(X).
Ответ будет следующим:
X = james.
Или:
?- father(X, thomas).
Ответ будет таким же.
Другие правила требуют дальнейшей оценки.
grandfather(X, Z) :- father(X, Y), father(Y, Z).
Это простая "программа".
Наш дед-программа будет оценивать значение true, если у нас есть правильные данные. Например:
father(james, william).
father(james, tyler).
father(james, thomas).
father(jeff, james).
Если я выполняю следующую программу:
?- grandfather(jeff, X).
Я получаю:
X = william
Я могу попросить пролог продолжить, и я получу X = tyler
и X = thomas
.
Синтаксис усложняется, но основы одинаковы. Данные и программа - всего лишь набор фактов. Искусство пролога делает правильные правила, которые приводят вычисление к результату.
Ответ 3
Это относится к терминам, являющимся данными, но программа также описывается в терминах.
Ответ 4
Просто чтобы надеть мою педантическую шляпу, имя для этого: homoiconic. Там много о нем: машинный код тоже гомоиконический.
Ответ 5
?- 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.