在序言中将两个事实分组的规则?

Rule to group two facts in prolog?

我正在为伦敦地铁编写代码。我已经声明了显示站名及其所在线路的事实。例如

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

我正在尝试制定一个规则来检查两个站是否在同一条线上,以及是哪条线。比如aldgatebaker在同一行,metropolitan.

有什么想法吗?

I'm trying to work out a rule that will check whether two stations are on the same line, and which line that is.

一个例子可以是下面的规则

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

灵活。

可以检测几个站点是否在同一线路(调用sameLine(aldgate, baker, metropolitan)return为真,调用sameLine(aldgate, baker, Line)return为真并统一Linemetropolitan) 但可以找到一条线路的几个站点(调用 sameLine(Stat1, Stat2, metropolitan) return true 两次,统一 Stat1aldgateStat2baker(第一次)反之亦然(第二次))。

遵守约束条件

Stat1 \= Stat2.

强加两个站不一样

如果你想要 sameLine(aldgate, aldgate, Line) return 真正统一 Linemetropolitan,你可以删除它。

如果您想要避免双重结果(aldgate/bakerbaker/aldgate,例如,调用 sameLine(Stat1, Stat2, metropolitan) ) 你可以强加 Stat1 不仅与 Stat2 不同,而且 "before" Stat2,替换

Stat1 \= Stat2

Stat1 @< Stat2

但是,通过这种方式,您从 sameLine(aldgate, baker, Line) 获得 true,但从 sameLine(baker, aldgate, Line) 获得 false(因为 baker 不是 "before" aldgate) .