Программа и данные одинаковы в прологе? - PullRequest
10 голосов
/ 02 марта 2010

Я слышал, что в Прологе программа и данные - это одно и то же. Что это значит?

Ответы [ 5 ]

6 голосов
/ 04 марта 2010

Источник Пролога - это просто список правил. Некоторые правила являются просто «данными» - они true без дальнейшей оценки.

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.

Синтаксис становится более сложным, но основы те же. Данные и программа - это просто набор фактов. Искусство пролога - создавать правильные правила, которые приводят вычисления к результату.

5 голосов
/ 02 марта 2010

Это означает, что ваша программа реализована в виде набора правил, а данные также реализованы в виде набора правил - нет различия между правилом, которое вызывает некоторые операции (программа), и правилом, которое просто дает вернуть значение данных.

4 голосов
/ 25 марта 2011

Просто надеть шляпу моего педанта - имя для этого: homoiconic. Многое из этого: машинный код тоже гомоичен.

4 голосов
/ 02 марта 2010

Это относится к терминам, являющимся данными, но программа также описывается терминами.

1 голос
/ 02 марта 2010
 ?- 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.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...