List 序言:编写现有列表的每个元素

List 序言:编写现有列表的每个元素,list,prolog,List,Prolog,我试着做两件事。(1) 显示现有列表中的每个元素,(2)搜索列表以显示包含该元素的所有名称 以下是一些事实: classes(hannes, [cs490, cs499, cs413]). % name has this list of classes classes(tony, [ma330, ma211, ma250]). classes(nicholas, [cs424, cs570, ma330]). classes(pj, [ma211, ma250, ma285, cs4

我试着做两件事。(1) 显示现有列表中的每个元素,(2)搜索列表以显示包含该元素的所有名称

以下是一些事实:

 classes(hannes, [cs490, cs499, cs413]).   % name has this list of classes
 classes(tony, [ma330, ma211, ma250]).
 classes(nicholas, [cs424, cs570, ma330]).
 classes(pj, [ma211, ma250, ma285, cs424]).
 classes(inga, [cs285, cs307, cs309]).
 classes(christine, [ma285, ma211, ma330]).
 classes(lisa, [cs424, cs413, cs490]).
 classes(marty, [cs570, cs424]).
到目前为止,我的规则是:

 taking(N,C) :-               % student Name N is taking class C
      classes(N,Cs),
      [C|T] = Cs.
目前,我知道这只是列表的开头并显示出来。我需要显示列表中的每一项(一次显示一行,如果足够简单,但并不重要的话)。但是,我也需要能够反过来做。如果查询到1门课程(ma330),我希望它显示拥有该特定课程的所有学生

查询示例1:

?- taking(nicholas, Classes).
Classes = [cs424, cs570, ma330] ;

查询示例2:

?- taking(Names, ma330).
Names = tony ;
Names = nicholas ;
Names = christine ;
我会继续寻找解决方案,但如果有人能帮忙,我将不胜感激


谢谢你

想想看:C是类的成员

编辑确定尝试以下代码:

taking(N,C) :-               % student Name N is taking class C
      classes(N,Cs),
      member(C, Cs).

想想看:C是类的成员

编辑确定尝试以下代码:

taking(N,C) :-               % student Name N is taking class C
      classes(N,Cs),
      member(C, Cs).

谢谢你的建议,但那并没有真正帮助我。谢谢你的建议,但那并没有真正帮助我。