Prolog for Beginners

时间:2012-12-14 20:47:21

标签: prolog

我是初学者并且有一个菜鸟问题:

假设我有这些代码行:

p(1).
p(2):-!.
p(3).

我正在运行p(X)

问题:我得到了X=1 , X=2 为什么X也不等于3

2 个答案:

答案 0 :(得分:4)

Prolog程序是一系列语句,称为子句,形式为

P0  :-  P1, P2, …, Pn.

为了帮助您理解您的问题,您必须知道:

P0, P1, P2, …, Pn中的每一个都是原子或结构。 句点终止每个Prolog条款

陈述含义:

如果P0P1以及......和P2为真,则

Pn为真”

程序含义:

“为了满足目标P0,请满足目标P1 然后P2然后......然后Pn“。

  • P0被称为条款的首要目标。
  • 目标P1, P2, …, Pn的连接形成了条款的主体。
  • 没有身体的条款是事实: “P.”表示“P is true”或“目标P is satisfied
  • 没有头的条款 “:- P1, P2, …, Pn.”或“?- P1, P2, …, Pn.”是解释为的查询 “Are P1 and P2 and … and Pn true?”或 “满足目标P1然后P2然后......然后Pn”

Cut子句包含“!”符号(也发音为bang)。当Prolog解释器看到剪切符号时,它会删除与包含爆炸的规则具有相同正面文字的剩余规则。这可以对程序产生一些影响 - 它可以代表某些负面结果,它可以避免或平滑地处理故障,或者它可以简单地消除部分搜索空间并加速程序。

答案 1 :(得分:1)

剪切“!”在p(3)之前执行...这就是为什么它不显示X = 3 ...