Как проверить, существует ли станция по фактам станций и линий в PROLOG? - PullRequest
1 голос
/ 14 марта 2020

Я написал следующие факты для представления карты трубок

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 Ответ

2 голосов
/ 14 марта 2020

Ваши константы начинаются с заглавной буквы, поэтому Пролог считает, что они переменные не константы.

Вы должны переписать их, чтобы они начинались с заглавной буквы или с кавычки:

station(<b>al</b>, [metropolitan]).
station(<b>bg</b>, [central]).
station(<b>br</b>, [victoria]).
station(<b>bs</b>, [metropolitan]).
station(<b>cl</b>, [central]).
station(<b>ec</b>, [bakerloo]).
station(<b>em</b>, [bakerloo,northern]).
station(<b>eu</b>, [northern]).
station(<b>fp</b>, [victoria]).
station(<b>fr</b>, [metropolitan]).
station(<b>ke</b>, [northern]).
station(<b>kx</b>, [metropolitan,victoria]).
station(<b>lg</b>, [central]).
station(<b>ls</b>, [central,metropolitan]).
station(<b>nh</b>, [central]).
station(<b>oc</b>, [bakerloo,central,victoria]).
station(<b>pa</b>, [bakerloo]).
station(<b>tc</b>, [central,northern]).
station(<b>vi</b>, [victoria]).
station(<b>wa</b>, [bakerloo]).
station(<b>ws</b>, [northern,victoria]).
...