我在理解此示例中发生的事情时遇到了麻烦
立即学习Prolog-Chapter 3-示例3:后继者
numeral(0).
numeral(succ(X)) :- numeral(X).
当被问到数字(X)时,它将首先给X赋0,然后继续succ(0),以这种方式将succ(0)部分递增一,直到空间用完:
X = 0 ?
X = succ(0) ? ;
X = succ(succ(0)) ? ;
X = succ(succ(succ(0))) ? ;
X = succ(succ(succ(succ(0)))) ?
我正在努力理解为什么它会增加succ(0)?
我知道,序言首先会找到一个事实并将其匹配,因此是第一个0。然后它将回溯以查看是否还有其他解决方案,并且它将“看到”该规则。在规则中,它将使用实例化的X到0。我失败的地方是,为什么它会不断增加succ(0)。 X是否变为succ(0),而不是0?
我为愚蠢的大脑道歉。
最佳答案
我正在努力了解为什么它会增加succ(0)
?
如果您再次阅读本节,则说明:
这是数字书写的另一种方式,有时在
数学逻辑。它仅使用四个符号:0
,succ
和
左括号和右括号(
)
。这种数字样式由
以下归纳定义:
0是数字。
如果X是数字,则succ(X)也是。
我看到很多人在第一次学习高等数学时遇到的问题之一是,当您说数学时,脑海中浮现的第一件事是Arabic numerals和Cartesian coordinate system。
对于此示例,您必须象征性地思考,例如Symbolic computation,或更确切地说,是Abstract rewriting system。
在此示例中,他们没有使用阿拉伯数字,而是描述数字的一种实用方式。换句话说,描述一个数字,您只有起始符号0
和一个函数succ(x)
。请注意,我说的是符号而不是数字,因为符号0
仅在置于上下文中时才有意义,在这种情况下为natural numbers
所以
0 is 0
1 is succ(0) - The successor of 0 is 1.
2 is succ(succ(0)) - The successor of the successor of 0 is 2 or
The successor of 1, e.g. succ(0), is 2.
等等。如果您阅读有关Lambda calculus的文章,您会经常看到。
关键字inductive给出了另一种思考方式。通过归纳,您需要一个开始的事实和一个将您带到下一个事实的规则。因此,
0
是事实,带您进入下一个事实的规则是succ(X)
。