2012-11-16 102 views
1

我試圖做兩件事。 (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. 

此刻,我知道這只是取列表頭,並顯示它。我需要顯示列表中的每一項(一次一行,如果容易做到,但不重要)。但是,我也需要能夠做到相反。如果查詢一門課程(ma330),我希望它顯示所有具有該課程的學生。

查詢示例1:

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

OR

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

查詢示例2:

?- taking(Names, ma330). 
Names = tony ; 
Names = nicholas ; 
Names = christine ; 

我會繼續尋找一個解決,但如果有人能幫助,將不勝感激。

謝謝!!!

回答

1

想一想:C是類的成員。

編輯 OK試試這個代碼:

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

謝謝你的建議,但並沒有真正幫助我。 – user1830705

相關問題