如何在PROLOG中根据站和线路的事实检查站是否存在

时间:2020-03-14 17:49:03

标签: 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]).
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。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

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

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

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]).
相关问题