Программа и данные в 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.