簡體   English   中英

使用member / 2謂詞在prolog中創建事件列表

[英]using member/2 predicate to create a list of events in prolog

如果Events是應該為組G安排的事件列表,則group_events(G,Events)為true。 我的代碼如下:

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

使用查詢group_events(group2MET,E)時得到的是:

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

等等...

我認為問題在於member/2謂詞所以任何幫助如何解決這個問題?

問題在於您不是從一個空列表開始,而是從一個未實例化的列表開始,向其開始添加要研究的事件並正在檢查其成員資格。
但是該列表尚未被實例化,因此它的尾部以及您從中獲得的任何成員也將未被實例化。


您想找到所有需要研究的事件,所以一個好的方法是首先定義一個study_event(G, E) ,該事件定義一個需要由組G研究的事件E ,然后使用findall/3查找所有此類事件。

我想你想要的

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM