我是 prolog 的新手,有一个菜鸟问题:
假设我有这些代码行:
p(1).
p(2):-!.
p(3).
我正在运行 p(X)
。
问题:我得到 X=1 , X=2
。
为什么 X
也不等于 3
?
最佳答案
Prolog 程序是一系列语句,称为子句,形式为
P0 :- P1, P2, …, Pn.
因此,为了帮助您理解您的问题,您必须了解以下内容:
P0, P1, P2, …, Pn
中的每一个都是一个原子或结构。
句点终止每个 Prolog 子句
声明意义:
“如果 P1
和 P2
以及……和 Pn
为真,则 P0
为真”
程序意义:
“要满足目标P0
,满足目标P1
然后 P2
然后……然后 Pn
”。
- P0 称为子句的主要目标。
- 目标
P1, P2, …, Pn
的组合构成了子句的主体。 - 没有正文的子句是事实:
“
P.
”表示“P为真
”或“目标P满足
” - 没有标题的子句
“
:- P1, P2, …, Pn.
”或“?- P1, P2, …, Pn.
”是一个解释为的查询“P1 和 P2 以及……和 Pn 是真的吗?”
或 “先满足目标 P1,然后是 P2,然后……然后是 Pn”
Cut 子句包含“!”符号(也发音为 bang)。当 Prolog 解释器看到 cut 符号时,它会删除剩余的规则,这些规则与包含 bang 的规则具有相同的正文字。这会对程序产生多种影响——它可以代表某些负面结果,可以避免或顺利处理失败,或者可以简单地消除部分搜索空间并加快程序速度。
关于初学者序言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13886022/