我是遵循“LearnPrologNow!”的 Prolog 初学者。一套教程。我正在尽我所能掌握概念和词汇。当遇到这个问题时,我已经能够理解所有内容,直到第 3 章递归定义:
numeral(0).
numeral(succ(X)) :- numeral(X).
给定查询
numeral(X).
现在,我了解到该程序的想法是 Prolog 将开始在该系统中按以下顺序计数数字
X=0
X=succ(0)
X=succ(succ(0))
但我不明白是什么导致它每次“缩减”并上升。我理解统一的原则是程序试图统一X的查询,但是它应该只遵循递归规则一次,然后返回零吗?是什么允许它在查询周围添加一个 succ() ?那不是在相反的方向遍历递归规则吗?