如何在PROLOG中检查站点是否存在于站点和线路事实之外

如何在PROLOG中检查站点是否存在于站点和线路事实之外,prolog,predicate,Prolog,Predicate,我写了以下事实来表示管状图 station(AL,[Metropolitan]). station(BG,[Central]). station(BR,[Victoria]). station(BS,[Metropolitan]). station(CL,[Central]). station(EC,[Bakerloo]). station(EM,[Bakerloo,Northern]). station(EU,[Northern]). station(FP,[Victoria]). stati

我写了以下事实来表示管状图

station(AL,[Metropolitan]).
station(BG,[Central]).
station(BR,[Victoria]).
station(BS,[Metropolitan]).
station(CL,[Central]).
station(EC,[Bakerloo]).
station(EM,[Bakerloo,Northern]).
station(EU,[Northern]).
station(FP,[Victoria]).
station(FR,[Metropolitan]).
station(KE,[Northern]).
station(KX,[Metropolitan,Victoria]).
station(LG,[Central]).
station(LS,[Central,Metropolitan]).
station(NH,[Central]).
station(OC,[Bakerloo,Central,Victoria]).
station(PA,[Bakerloo]).
station(TC,[Central,Northern]).
station(VI,[Victoria]).
station(WA,[Bakerloo]).
station(WS,[Northern,Victoria]).
我需要写一个形式谓词

station_exists(Station)
检查站点是否存在,但我不知道如何编写规则。我试过这样的方法:

station_exists(Station):- station(Station,_)

但对于任何电台名称,它都返回true。有人能帮忙吗?

您的常量以大写字母开头,因此Prolog认为这些是变量而不是常量

您应该重写这些,以大写字母或带引号的atom开头:

station(al, [metropolitan]).
station(bg, [central]).
station(br, [victoria]).
station(bs, [metropolitan]).
station(cl, [central]).
station(ec, [bakerloo]).
station(em, [bakerloo,northern]).
station(eu, [northern]).
station(fp, [victoria]).
station(fr, [metropolitan]).
station(ke, [northern]).
station(kx, [metropolitan,victoria]).
station(lg, [central]).
station(ls, [central,metropolitan]).
station(nh, [central]).
station(oc, [bakerloo,central,victoria]).
station(pa, [bakerloo]).
station(tc, [central,northern]).
station(vi, [victoria]).
station(wa, [bakerloo]).
station(ws, [northern,victoria]).
车站(al,[大都市])。
车站(bg,[中央])。
车站(br,[维多利亚])。
车站(bs,[大都市])。
车站(中央车站)。
车站(ec,[bakerloo])。
车站(em,[贝克卢,北部])。
车站(欧盟,[北部])。
车站(fp,[victoria])。
车站(fr,[大都市])。
车站(克[北])。
车站(kx,[维多利亚州大都会])。
车站(lg,[中央])。
车站(ls,[中心,大都会])。
车站(新罕布什尔州,[中央])。
车站(维多利亚州中环贝克鲁区主管)。
车站(宾夕法尼亚州,[bakerloo])。
车站(tc,[中部,北部])。
车站(vi,[维多利亚])。
车站(西澳州,[bakerloo])。

station(ws,[northern,victoria])。
您的常量以大写开头,因此Prolog认为这些变量不是常量。请不要破坏您的帖子,为其他人做更多的工作。通过在Stack Exchange网络上发布,您已授予Stack Exchange在下不可撤销的权利,以分发该内容(即,无论您未来的选择如何)。根据堆栈交换策略,帖子的非破坏版本是分发的版本。因此,任何故意破坏行为都将恢复原状。如果您想了解有关删除帖子的更多信息,请参阅: