从PROLOG的列表中获取成员

时间:2016-12-28 10:16:04

标签: list prolog

我必须制定规则以返回已输入电台的线路

但是为了得到所有这些内容,我必须制定一条规则:

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]).

1 个答案:

答案 0 :(得分:0)

不确定你是否需要来自站点或站点的行但是......在这两种情况下,我认为你需要member/2谓词(就我所知,也就是说,并且受SWI-Prolog支持的ISO) )。

我建议像

line(Line, ListofStations) :-
  station(ListofStations, LineList),
  member(Line, LineList).

在两个方向都有效。

例如,当我打电话

 line(central, L)

我得到(L统一)oxford_circusnottingHill_gatelancaster_gatetottenham_court_roadchancery_laneliverpool_streetbethnal_green

当我打电话

line(L, oxford_circus)

我得到bakerloocentralvictoria