Prolog内置谓词详解
1. 影响回溯的内置谓词
在Prolog编程中,有两个内置谓词会影响回溯过程中事件的正常顺序,它们分别是 “!” 和 repeat
。
- “!”(剪枝) :可以看作是一个内置谓词,它会让Prolog执行过程锁定已经做出的某些选择。其作用是移除目标重新满足的可能性。
- repeat
:作为一种额外的方式,通过回溯来生成多个解决方案。虽然它是内置的,但可以看作是按以下方式定义的:
repeat.
repeat :- repeat.
当把 repeat
作为规则中的一个目标时,会产生以下效果:
1. 目标会成功,因为 repeat
的第一个子句是一个事实。
2. 如果回溯再次到达这一点,Prolog将能够尝试另一种选择,即 repeat
的第二个子句所提供的规则。使用该规则时,会生成一个新的 repeat
目标,由于它与第一个事实匹配,所以又会成功。以此类推, repeat
目标在回溯时可以无限次成功。
repeat
的作用在于,它允许从没有选择的规则构建出有选择的规则,并且每次可以生成不同的值。
例如,考虑内置谓词 get_char
,当Prolog尝试满足