Prolog 在序言中将两个事实分组的规则?
我正在为伦敦地铁写代码。我已经声明了一些事实,这些事实显示了一个车站的名称以及它在哪条线上。e、 gProlog 在序言中将两个事实分组的规则?,prolog,rules,Prolog,Rules,我正在为伦敦地铁写代码。我已经声明了一些事实,这些事实显示了一个车站的名称以及它在哪条线上。e、 g station(aldgate,metropolitan). station(brixton,victoria). station(baker,metropolitan). 我正试图制定一条规则,检查两个车站是否在同一条线上,以及是哪条线上。例如,aldgate和baker在同一行,metropolitan 有什么想法吗 我正试图制定一条规则,检查两个车站是否在同一条线上,以及是哪条线上 下面
station(aldgate,metropolitan).
station(brixton,victoria).
station(baker,metropolitan).
我正试图制定一条规则,检查两个车站是否在同一条线上,以及是哪条线上。例如,aldgate
和baker
在同一行,metropolitan
有什么想法吗
我正试图制定一条规则,检查两个车站是否在同一条线上,以及是哪条线上
下面的规则就是一个例子
sameLine(Stat1, Stat2, Line) :-
station(Stat1, Line),
station(Stat2, Line),
Stat1 \= Stat2.
这是灵活的
它可以检查两个站点是否在同一条线路上(调用sameLine(aldgate,baker,metropolitan)
返回true,调用sameLine(aldgate,baker,line)
返回true,并将线路
与metropolitan
统一),但可以找到一条线路上的多个站点(调用sameLine(Stat1、Stat2、metropolitan)
返回两次真值,将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@
但是,通过这种方式,你可以从sameLine(aldgate,baker,Line)中获得true,而从sameLine(baker,aldgate,Line)中获得false(因为
baker
不是“在”aldgate
之前”)中获得false(因为baker
不是“(learnprolognow.org))。谢谢你,我已经看过这个网站了,它非常有用!
Stat1 @< Stat2