规则在prolog中分组两个事实?

时间:2017-01-07 01:29:09

标签: prolog rules

我正在为伦敦管编写代码。我已经声明了显示工作站名称以及它所在的行的事实。 e.g。

station(aldgate,metropolitan).
station(brixton,victoria).
station(baker,metropolitan).

我正在尝试制定一条规则,检查两个工作站是否在同一条线上,以及是哪条线。例如,aldgatebaker位于同一行metropolitan

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

  

我正在尝试制定一条规则来检查两个工作站是否在同一条线上,以及是哪条线。

示例可以是以下规则

sameLine(Stat1, Stat2, Line) :-
  station(Stat1, Line),
  station(Stat2, Line),
  Stat1 \= Stat2.

这是灵活的。

它可以检查几个电台是否在同一行(调用sameLine(aldgate, baker, metropolitan)返回true,调用sameLine(aldgate, baker, Line)返回true并将Linemetropolitan统一)但是可以查找一行的电台(调用sameLine(Stat1, Stat2, metropolitan)两次返回true,将Stat1aldgate统一,Stat2baker(第一次)统一相反(第二次))。

遵守约束

Stat1 \= Stat2.

强制两个站点不同。

如果您希望sameLine(aldgate, aldgate, Line)返回真正统一Line metropolitan,则可以将其删除。

如果你想要避免双重结果(aldgate / bakerbaker / aldgate,例如调用sameLine(Stat1, Stat2, metropolitan))你可以强制Stat1不仅与Stat2不同,而且也在“Stat2之前”,取代

Stat1 \= Stat2

Stat1 @< Stat2

但是,通过这种方式,您从sameLine(aldgate, baker, Line)获得了true,但是从baker获得了aldgate不是“sameLine(baker, aldgate, Line)之前”。