我正在为伦敦管编写代码。我已经声明了显示工作站名称以及它所在的行的事实。 e.g。
station(aldgate,metropolitan).
station(brixton,victoria).
station(baker,metropolitan).
我正在尝试制定一条规则,检查两个工作站是否在同一条线上,以及是哪条线。例如,aldgate
和baker
位于同一行metropolitan
。
有什么想法吗?
答案 0 :(得分:3)
我正在尝试制定一条规则来检查两个工作站是否在同一条线上,以及是哪条线。
示例可以是以下规则
sameLine(Stat1, Stat2, Line) :-
station(Stat1, Line),
station(Stat2, Line),
Stat1 \= Stat2.
这是灵活的。
它可以检查几个电台是否在同一行(调用sameLine(aldgate, baker, metropolitan)
返回true,调用sameLine(aldgate, baker, Line)
返回true并将Line
与metropolitan
统一)但是可以查找一行的电台(调用sameLine(Stat1, Stat2, metropolitan)
两次返回true,将Stat1
与aldgate
统一,Stat2
与baker
(第一次)统一相反(第二次))。
遵守约束
Stat1 \= Stat2.
强制两个站点不同。
如果您希望sameLine(aldgate, aldgate, Line)
返回真正统一Line
metropolitan
,则可以将其删除。
如果你想要避免双重结果(aldgate
/ baker
和baker
/ aldgate
,例如调用sameLine(Stat1, Stat2, metropolitan)
)你可以强制Stat1
不仅与Stat2
不同,而且也在“Stat2
之前”,取代
Stat1 \= Stat2
与
Stat1 @< Stat2
但是,通过这种方式,您从sameLine(aldgate, baker, Line)
获得了true,但是从baker
获得了aldgate
不是“sameLine(baker, aldgate, Line)
之前”。