Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Prolog 在序言中将两个事实分组的规则?_Prolog_Rules - Fatal编程技术网

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

Prolog 在序言中将两个事实分组的规则?,prolog,rules,Prolog,Rules,我正在为伦敦地铁写代码。我已经声明了一些事实,这些事实显示了一个车站的名称以及它在哪条线上。e、 g station(aldgate,metropolitan). station(brixton,victoria). station(baker,metropolitan). 我正试图制定一条规则,检查两个车站是否在同一条线上,以及是哪条线上。例如,aldgate和baker在同一行,metropolitan 有什么想法吗 我正试图制定一条规则,检查两个车站是否在同一条线上,以及是哪条线上 下面

我正在为伦敦地铁写代码。我已经声明了一些事实,这些事实显示了一个车站的名称以及它在哪条线上。e、 g

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