首页 > 解决方案 > Prolog“递归”查询

问题描述

我最近开始学习 Prolog,遇到了一个问题。

有些人围坐在一张桌子旁。我们得到了事实sits_right_of(X, Y)(X 位于 Y 的右侧)。然后我写了下一条规则:

我如何找出坐在给定人右侧(或左侧)两个位置的人是谁?是否有某种递归查询sits_right_of(sits_right_of(X, alex))?我是否需要编写另一条规则来找出谁坐在n远离某人的地方?

标签: prolog

解决方案


您从过程中获取值的方式与输入它们的方式相同。引入一个新变量并尝试满足sits_right_of(Y, alex)。那么,这也必须满足:sits_right_of(X, Y)。该过程可以这样定义:

sits_two_places_right_of(X, Y) :- sits_right_of(X, Z), sits_right_of(Z, Y).

是的,可以为每个数字或人类似地创建这样的过程,或者使用算术,如果你想将它作为参数。


推荐阅读