Prolog中的程序和数据是一样的吗?

Yug*_*gga 10 prolog

我听说在Prolog中,程序和数据是一回事.那是什么意思?

Eni*_*ity 6

Prolog源只是一个规则列表.有些规则只是"数据" - 它们true没有进一步的评估.

person(james).
father(james, thomas).
Run Code Online (Sandbox Code Playgroud)

"詹姆斯是一个人." "詹姆斯是托马斯的父亲."

这些规则就是数据.

我可以针对这些数据运行查询.我可以问:

?- person(X).
Run Code Online (Sandbox Code Playgroud)

答案是:

X = james.
Run Code Online (Sandbox Code Playgroud)

要么:

?- father(X, thomas).
Run Code Online (Sandbox Code Playgroud)

答案是一样的.

其他规则需要进一步评估.

grandfather(X, Z) :- father(X, Y), father(Y, Z).
Run Code Online (Sandbox Code Playgroud)

这是一个简单的"程序".

如果我们有正确的数据,我们的祖父计划将评估为真.例如:

father(james, william).
father(james, tyler).
father(james, thomas).
father(jeff, james).
Run Code Online (Sandbox Code Playgroud)

如果我执行以下程序:

?- grandfather(jeff, X).
Run Code Online (Sandbox Code Playgroud)

我明白了:

X = william
Run Code Online (Sandbox Code Playgroud)

我可以要求prolog继续,我会得到X = tylerX = thomas.

语法变得更复杂,但基础是相同的.数据和程序只是一组事实.prolog的艺术正在制定正确的规则,以推动计算结果.


Car*_*rum 5

这意味着您的程序是作为一堆规则实现的,数据也是作为一堆规则实现的 - 导致某些操作发生的规则(程序)与仅返回数据的规则之间没有区别值.