在序言中将两个事实分组的规则?
Rule to group two facts in prolog?
我正在为伦敦地铁编写代码。我已经声明了显示站名及其所在线路的事实。例如
station(aldgate,metropolitan).
station(brixton,victoria).
station(baker,metropolitan).
我正在尝试制定一个规则来检查两个站是否在同一条线上,以及是哪条线。比如aldgate
和baker
在同一行,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为真并统一Line
与 metropolitan
) 但可以找到一条线路的几个站点(调用 sameLine(Stat1, Stat2, metropolitan)
return true 两次,统一 Stat1
与 aldgate
和 Stat2
与 baker
(第一次)反之亦然(第二次))。
遵守约束条件
Stat1 \= Stat2.
强加两个站不一样
如果你想要 sameLine(aldgate, aldgate, Line)
return 真正统一 Line
和 metropolitan
,你可以删除它。
如果您想要避免双重结果(aldgate
/baker
和 baker
/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
) .
我正在为伦敦地铁编写代码。我已经声明了显示站名及其所在线路的事实。例如
station(aldgate,metropolitan).
station(brixton,victoria).
station(baker,metropolitan).
我正在尝试制定一个规则来检查两个站是否在同一条线上,以及是哪条线。比如aldgate
和baker
在同一行,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为真并统一Line
与 metropolitan
) 但可以找到一条线路的几个站点(调用 sameLine(Stat1, Stat2, metropolitan)
return true 两次,统一 Stat1
与 aldgate
和 Stat2
与 baker
(第一次)反之亦然(第二次))。
遵守约束条件
Stat1 \= Stat2.
强加两个站不一样
如果你想要 sameLine(aldgate, aldgate, Line)
return 真正统一 Line
和 metropolitan
,你可以删除它。
如果您想要避免双重结果(aldgate
/baker
和 baker
/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
) .