【问题标题】:Prolog "recursive" queryProlog“递归”查询
【发布时间】:2018-05-01 02:21:04
【问题描述】:

我最近开始学习 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 位置?

【问题讨论】:

    标签: prolog


    【解决方案1】:

    您从过程中获取值的方式与输入它们的方式相同。引入一个新变量并尝试满足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).
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-26
      • 2011-12-09
      • 2014-06-16
      • 2018-10-09
      • 1970-01-01
      相关资源
      最近更新 更多