我听说在Prolog中,程序和数据是一回事。这是什么意思?
答案 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 = tyler
和X = 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.