我必须制定规则以返回已输入电台的线路
但是为了得到所有这些内容,我必须制定一条规则:
line(Line,ListofStations) :-
station(ListofStations,[Line]);
station(ListofStations,[_,Line]);
station(ListofStations,[Line,_]);
station(ListofStations,[Line,_,_]);
station(ListofStations,[_,Line,_]);
station(ListofStations,[Line,_,_]).
我需要使用谓词来缩小规则, 但是成员函数只返回true,下面的规则适用于所有情况,除了列表中有多个元素的情况。
line(Line,ListofStations):- station(ListofStations,[Line]).
事实:
station(oxford_circus,[bakerloo,central,victoria]).
station(embankment,[bakerloo,northern]).
station(elephantandcastle,[bakerloo]).
station(nottingHill_gate,[central]).
station(lancaster_gate,[central]).
station(tottenham_court_road,[central]).
station(chancery_lane,[central]).
station(liverpool_street,[central,metropolitan]).
station(bethnal_green,[central]).
答案 0 :(得分:0)
不确定你是否需要来自站点或站点的行但是......在这两种情况下,我认为你需要member/2
谓词(就我所知,也就是说,并且受SWI-Prolog支持的ISO) )。
我建议像
line(Line, ListofStations) :-
station(ListofStations, LineList),
member(Line, LineList).
在两个方向都有效。
例如,当我打电话
line(central, L)
我得到(L
统一)oxford_circus
,nottingHill_gate
,lancaster_gate
,tottenham_court_road
,chancery_lane
,liverpool_street
和bethnal_green
当我打电话
line(L, oxford_circus)
我得到bakerloo
,central
和victoria
。