我最近开始学习Prolog并遇到了一个问题。
有些人坐在桌子旁边。我们得到了事实sits_right_of(X, Y)
(X坐在Y的右边)。然后我写了下一条规则:
sits_left_of(X, Y) :- sits_right_of(Y, X)
(X位于Y左侧); are_neighbors_of(X, Y, Z) :- sits_left_of(X, Z)
(X左边坐Z,Y坐Z右边); next_to_each_other(X, Y) :- are_neighbors_of(_, X, Y); are_neighbors_of(X, _, Y)
(X坐在Y旁边)。我怎样才能找出谁坐在某个人的右边(或左边)两个地方的人?是否有某种递归查询,如sits_right_of(sits_right_of(X, alex))
?我是否需要编写另一条规则来查找谁n
远离某人的位置?
答案 0 :(得分:0)
您可以按照与输入过程相同的方式从过程中获取值。引入一个新变量并尝试满足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).
是的,如果你想让它成为一个参数,可以为每个数字或人,或使用算术类似地创建这样的程序。