使用member / 2谓词在prolog中创建事件列表

时间:2016-03-19 13:33:12

标签: list prolog

如果Events是事件列表,则

G为真 应安排在studying(csen602, group2MET). event_in_course(csen602, quiz1, quiz). event_in_course(csen602, quiz2, quiz). event_in_course(csen602, quiz3, quiz). group_events(G,[Name|T]):- studying(Course,G), event_in_course(Course,Name,_), \+member(Name,T), group_events(G,T). group_events(G,Events):- member(Name,Events), studying(Course,G), event_in_course(Course,Name,Type). 组。我的代码如下:

E = [quiz1|_G567]
E = [quiz2|_G502]
E = [quiz3|_G502]
E = [_G501, quiz1|_G505]
E = [_G501, quiz2|_G505]
E = [_G501, quiz3|_G505]

使用查询group_events(group2MET,E)时得到的是:

member/2

依旧......

我认为问题在于>>> response.xpath(".//li[@class='amenities_details']/span[normalize-space(.)='Amenities:']/following-sibling::span[1]/ul//li/span/div/@title").extract() [u'Balcony', u'Pets Allowed', u'Gymnasium', u'Children\u2019s play area', u'Mosque', u'Shared swimming pool', u'24 hours Maintenance', u'Basement parking', u'Central air conditioning', u'Basketball Court'] 谓词,所以任何帮助如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

问题在于你没有开始'有一个空列表,但有一个未经实例化的列表,你开始添加要研究的事件以及你要检查的成员资格。
但是该列表仍未被实例化,因此它的尾部以及从中获得的任何成员也将被实例化。

您想要 find all 需要研究的事件,因此一个好的方法是首先定义一个study_event(G, E)来定义事件E需要由小组G进行研究,然后使用findall/3查找所有此类活动。

答案 1 :(得分:0)

我想你想要

group_events(G,Events):-
    setof(Event, Course^Desc^(
      studying(Course,G),
      event_in_course(Course,Event,Desc)
    ), Events).