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

时间:2010-03-02 01:37:33

标签: prolog

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

5 个答案:

答案 0 :(得分:6)

Prolog来源只是一个规则列表。有些规则只是“数据” - 它们是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

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

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

答案 1 :(得分:5)

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

答案 2 :(得分:4)

这是指术语是数据,但程序也用术语描述。

答案 3 :(得分:4)

只是戴上我的学生的帽子 - 这个名字是:homoiconic。有很多关于:机器代码也是同质的。

答案 4 :(得分:1)

 ?- 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.