[英]Prolog: Writing each element of an existing list
我正在尝试做两件事。 (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] ;
要么
?- taking(nicholas, Classes).
Classes = cs424 ;
Classes = cs570 ;
Classes = ma330 ;
查询示例2:
?- taking(Names, ma330).
Names = tony ;
Names = nicholas ;
Names = christine ;
我将继续寻找解决方案,但是如果有人可以提供帮助,我们将不胜感激。
谢谢!!!
想到:C是Classes的成员。
编辑确定,请尝试以下代码:
taking(N,C) :- % student Name N is taking class C
classes(N,Cs),
member(C, Cs).
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.